From 4ff5769f4286212d6ca50f82647cdd3849e1a361 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 23 Jan 2020 16:52:41 -0500 Subject: [PATCH 01/11] union_room_chat through sub_81287B4 --- asm/union_room_chat.s | 587 ----------------------------------------- data/union_room_chat.s | 12 - include/global.h | 5 +- include/help_system.h | 1 + include/link_rfu.h | 1 + include/main.h | 1 + ld_script.txt | 2 + src/union_room_chat.c | 352 ++++++++++++++++++++++++ 8 files changed, 361 insertions(+), 600 deletions(-) create mode 100644 src/union_room_chat.c diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index adfd66b5d..6f68a333f 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5,593 +5,6 @@ .text - thumb_func_start sub_8128420 -sub_8128420: @ 8128420 - push {r4,lr} - ldr r4, _08128450 @ =gUnknown_203B0E0 - movs r0, 0xDC - lsls r0, 1 - bl Alloc - str r0, [r4] - bl sub_812845C - ldr r1, _08128454 @ =gKeyRepeatStartDelay - movs r0, 0x14 - strh r0, [r1] - bl sub_812B4AC - movs r0, 0 - bl SetVBlankCallback - ldr r0, _08128458 @ =c2_081284E0 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128450: .4byte gUnknown_203B0E0 -_08128454: .4byte gKeyRepeatStartDelay -_08128458: .4byte c2_081284E0 - thumb_func_end sub_8128420 - - thumb_func_start sub_812845C -sub_812845C: @ 812845C - push {r4-r7,lr} - adds r4, r0, 0 - movs r5, 0 - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x6] - strb r5, [r4, 0x10] - strb r5, [r4, 0x11] - strb r5, [r4, 0x12] - strb r5, [r4, 0x14] - strb r5, [r4, 0x15] - strb r5, [r4, 0x16] - movs r0, 0xFF - strb r0, [r4, 0x1A] - bl GetLinkPlayerCount - strb r0, [r4, 0xD] - bl GetMultiplayerId - strb r0, [r4, 0x13] - strb r5, [r4, 0x17] - strb r5, [r4, 0x18] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r4, r1 - bl sub_8129560 - ldr r7, _081284B4 @ =gSaveBlock1Ptr - ldr r6, _081284B8 @ =0x00003ad4 - adds r4, 0xB9 - movs r5, 0x9 -_0812849A: - ldr r1, [r7] - adds r1, r6 - adds r0, r4, 0 - bl StringCopy - adds r6, 0x15 - adds r4, 0x15 - subs r5, 0x1 - cmp r5, 0 - bge _0812849A - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081284B4: .4byte gSaveBlock1Ptr -_081284B8: .4byte 0x00003ad4 - thumb_func_end sub_812845C - - thumb_func_start sub_81284BC -sub_81284BC: @ 81284BC - push {r4,lr} - ldr r4, _081284DC @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0xE] - bl DestroyTask - ldr r0, [r4] - ldrb r0, [r0, 0xF] - bl DestroyTask - ldr r0, [r4] - bl Free - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081284DC: .4byte gUnknown_203B0E0 - thumb_func_end sub_81284BC - - thumb_func_start c2_081284E0 -c2_081284E0: @ 81284E0 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _081284FC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r6, r0, r1 - ldrb r0, [r6] - cmp r0, 0x1 - beq _08128518 - cmp r0, 0x1 - bgt _08128500 - cmp r0, 0 - beq _08128506 - b _08128598 - .align 2, 0 -_081284FC: .4byte gMain -_08128500: - cmp r0, 0x2 - beq _08128554 - b _08128598 -_08128506: - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - bl sub_8129B14 - b _08128548 -_08128518: - bl sub_8129BFC - bl sub_8129B78 - adds r5, r0, 0 - cmp r5, 0 - bne _08128598 - 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 - ldr r0, _08128550 @ =sub_81285B4 - bl SetVBlankCallback -_08128548: - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _08128598 - .align 2, 0 -_08128550: .4byte sub_81285B4 -_08128554: - bl UpdatePaletteFade - ldr r0, _081285A0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08128598 - ldr r0, _081285A4 @ =sub_81285CC - bl SetMainCallback2 - movs r0, 0x11 - movs r1, 0 - bl SetQuestLogEvent - ldr r0, _081285A8 @ =sub_81285E8 - movs r1, 0x8 - bl CreateTask - ldr r4, _081285AC @ =gUnknown_203B0E0 - ldr r1, [r4] - strb r0, [r1, 0xE] - ldr r0, _081285B0 @ =sub_81298F8 - movs r1, 0x7 - bl CreateTask - ldr r1, [r4] - strb r0, [r1, 0xF] - bl LoadWirelessStatusIndicatorSpriteGfx - movs r0, 0xE8 - movs r1, 0x96 - bl CreateWirelessStatusIndicatorSprite -_08128598: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081285A0: .4byte gPaletteFade -_081285A4: .4byte sub_81285CC -_081285A8: .4byte sub_81285E8 -_081285AC: .4byte gUnknown_203B0E0 -_081285B0: .4byte sub_81298F8 - thumb_func_end c2_081284E0 - - thumb_func_start sub_81285B4 -sub_81285B4: @ 81285B4 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r0} - bx r0 - thumb_func_end sub_81285B4 - - thumb_func_start sub_81285CC -sub_81285CC: @ 81285CC - push {lr} - bl RunTasks - bl sub_8129BFC - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_81285CC - - thumb_func_start sub_81285E8 -sub_81285E8: @ 81285E8 - push {r4,lr} - ldr r4, _08128600 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0x17] - cmp r0, 0x2 - beq _0812860E - cmp r0, 0x2 - bgt _08128604 - cmp r0, 0x1 - beq _0812860A - b _0812861E - .align 2, 0 -_08128600: .4byte gUnknown_203B0E0 -_08128604: - cmp r0, 0x3 - beq _08128612 - b _0812861E -_0812860A: - movs r0, 0x6 - b _08128614 -_0812860E: - movs r0, 0x7 - b _08128614 -_08128612: - movs r0, 0x8 -_08128614: - bl sub_8129218 - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0x17] -_0812861E: - ldr r1, _08128638 @ =gUnknown_845A880 - ldr r0, _0812863C @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x4] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128638: .4byte gUnknown_845A880 -_0812863C: .4byte gUnknown_203B0E0 - thumb_func_end sub_81285E8 - - thumb_func_start sub_8128640 -sub_8128640: @ 8128640 - push {r4,lr} - ldr r4, _08128658 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrh r1, [r0, 0x6] - cmp r1, 0x1 - beq _08128674 - cmp r1, 0x1 - bgt _0812865C - cmp r1, 0 - beq _08128662 - b _081286BC - .align 2, 0 -_08128658: .4byte gUnknown_203B0E0 -_0812865C: - cmp r1, 0x2 - beq _081286AC - b _081286BC -_08128662: - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_8129568 - ldr r1, [r4] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] -_08128674: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081286BC - bl sub_80FBA1C - cmp r0, 0 - bne _081286BC - ldr r4, _081286A8 @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _081286BC - ldr r1, [r4] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _081286BC - .align 2, 0 -_081286A8: .4byte gUnknown_203B0E0 -_081286AC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081286BC - movs r0, 0x1 - bl sub_8129218 -_081286BC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128640 - - thumb_func_start sub_81286C4 -sub_81286C4: @ 81286C4 - push {r4,r5,lr} - ldr r5, _081286D8 @ =gUnknown_203B0E0 - ldr r3, [r5] - ldrh r0, [r3, 0x6] - cmp r0, 0 - beq _081286DC - cmp r0, 0x1 - beq _0812878A - b _081287AC - .align 2, 0 -_081286D8: .4byte gUnknown_203B0E0 -_081286DC: - ldr r1, _081286F8 @ =gMain - ldrh r2, [r1, 0x2E] - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _081286FC - ldrb r0, [r3, 0x15] - cmp r0, 0 - beq _081287AC - movs r0, 0x4 - bl sub_8129218 - b _081287AC - .align 2, 0 -_081286F8: .4byte gMain -_081286FC: - movs r0, 0x4 - ands r0, r2 - cmp r0, 0 - beq _0812870C - movs r0, 0x2 - bl sub_8129218 - b _081287AC -_0812870C: - ldrh r1, [r1, 0x30] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08128738 - ldrb r0, [r3, 0x15] - cmp r0, 0 - beq _08128730 - bl sub_81293AC - movs r0, 0x8 - movs r1, 0 - bl sub_8129C34 - ldr r1, [r5] - movs r0, 0x1 - strh r0, [r1, 0x6] - b _081287AC -_08128730: - movs r0, 0x3 - bl sub_8129218 - b _081287AC -_08128738: - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _08128754 - bl sub_81292D8 - movs r0, 0x8 - movs r1, 0 - bl sub_8129C34 - movs r0, 0x2 - movs r1, 0x1 - b _08128780 -_08128754: - movs r0, 0x80 - lsls r0, 1 - ands r0, r2 - cmp r0, 0 - beq _08128774 - ldrb r0, [r3, 0x10] - cmp r0, 0x3 - beq _0812876C - bl sub_81293D8 - movs r0, 0x8 - b _0812877E -_0812876C: - movs r0, 0x5 - bl sub_8129218 - b _081287AC -_08128774: - bl sub_8129228 - cmp r0, 0 - beq _081287AC - movs r0, 0x1 -_0812877E: - movs r1, 0 -_08128780: - bl sub_8129C34 - ldr r0, [r5] - strh r4, [r0, 0x6] - b _081287AC -_0812878A: - movs r0, 0 - bl sub_8129C8C - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl sub_8129C8C - lsls r0, 24 - lsrs r1, r0, 24 - cmp r4, 0 - bne _081287AC - cmp r1, 0 - bne _081287AC - ldr r0, [r5] - strh r1, [r0, 0x6] -_081287AC: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81286C4 - - thumb_func_start sub_81287B4 -sub_81287B4: @ 81287B4 - push {r4-r6,lr} - ldr r0, _081287CC @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x6] - cmp r0, 0x4 - bls _081287C2 - b _081288CE -_081287C2: - lsls r0, 2 - ldr r1, _081287D0 @ =_081287D4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081287CC: .4byte gUnknown_203B0E0 -_081287D0: .4byte _081287D4 - .align 2, 0 -_081287D4: - .4byte _081287E8 - .4byte _081287F2 - .4byte _08128810 - .4byte _0812889C - .4byte _081288B0 -_081287E8: - movs r0, 0x3 - movs r1, 0 - bl sub_8129C34 - b _081287FE -_081287F2: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE -_081287FE: - ldr r0, _0812880C @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _081288CE - .align 2, 0 -_0812880C: .4byte gUnknown_203B0E0 -_08128810: - bl Menu_ProcessInput - lsls r0, 24 - asrs r0, 8 - lsrs r6, r0, 16 - asrs r4, r0, 16 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _08128848 - adds r0, 0x1 - cmp r4, r0 - beq _08128868 - movs r0, 0x4 - movs r1, 0 - bl sub_8129C34 - ldr r5, _08128844 @ =gUnknown_203B0E0 - ldr r2, [r5] - ldrb r0, [r2, 0x10] - cmp r0, r4 - beq _08128870 - cmp r4, 0x3 - ble _08128880 - b _08128870 - .align 2, 0 -_08128844: .4byte gUnknown_203B0E0 -_08128848: - ldr r0, _08128864 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081288CE - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl Menu_MoveCursor - b _081288CE - .align 2, 0 -_08128864: .4byte gMain -_08128868: - movs r0, 0x4 - movs r1, 0 - bl sub_8129C34 -_08128870: - ldr r0, _0812887C @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - strh r0, [r1, 0x6] - b _081288CE - .align 2, 0 -_0812887C: .4byte gUnknown_203B0E0 -_08128880: - movs r1, 0 - strb r1, [r2, 0x11] - ldr r0, [r5] - strb r1, [r0, 0x12] - movs r0, 0x5 - movs r1, 0x1 - bl sub_8129C34 - ldr r0, [r5] - strb r6, [r0, 0x10] - ldr r1, [r5] - movs r0, 0x4 - strh r0, [r1, 0x6] - b _081288CE -_0812889C: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE - movs r0, 0x1 - bl sub_8129218 - b _081288CE -_081288B0: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE - movs r0, 0x1 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE - movs r0, 0x1 - bl sub_8129218 -_081288CE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81287B4 - thumb_func_start sub_81288D4 sub_81288D4: @ 81288D4 push {r4,lr} diff --git a/data/union_room_chat.s b/data/union_room_chat.s index b61c5f44d..84f9d9c39 100644 --- a/data/union_room_chat.s +++ b/data/union_room_chat.s @@ -6,18 +6,6 @@ .section .rodata .align 2 -gUnknown_845A880:: @ 845A880 - .4byte sub_8128640 - .4byte sub_81286C4 - .4byte sub_81287B4 - .4byte sub_81288D4 - .4byte sub_8128DA4 - .4byte sub_8128E78 - .4byte sub_8128AA0 - .4byte sub_8128C04 - .4byte sub_8128CA8 - .4byte sub_8128FB8 - gUnknown_845A8A8:: @ 845A8A8 .byte 0x09, 0x09, 0x09, 0x09 diff --git a/include/global.h b/include/global.h index 180a1e0a3..686ecb11c 100644 --- a/include/global.h +++ b/include/global.h @@ -718,6 +718,8 @@ struct TrainerNameRecord u8 trainerName[PLAYER_NAME_LENGTH]; }; +#define UNION_ROOM_KB_ROW_COUNT 10 + struct SaveBlock1 { /*0x0000*/ struct Coords16 pos; @@ -772,7 +774,8 @@ struct SaveBlock1 /*0x3A18*/ u8 seen2[DEX_FLAGS_NO]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; /*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS]; - /*0x3A94*/ u8 filler3A94[0x114]; + /*0x3A94*/ u8 filler3A94[0x40]; + /*0x3AD4*/ u8 unk3AD4[UNION_ROOM_KB_ROW_COUNT][21]; /*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3C98*/ struct DaycareMon route5DayCareMon; /*0x3D24*/ u8 filler3D24[0x10]; diff --git a/include/help_system.h b/include/help_system.h index 273b5e119..59adec912 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -92,5 +92,6 @@ bool8 MoveCursor(u8 by, u8 dirn); void HelpSystem_BackupSomeVariable(void); void HelpSystem_RestoreSomeVariable(void); void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height); +void sub_812B4AC(void); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 790429870..2e502165a 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -325,6 +325,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx); bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx); +bool32 sub_80FBA1C(void); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/main.h b/include/main.h index c962cf7bd..f89ffbd63 100644 --- a/include/main.h +++ b/include/main.h @@ -73,5 +73,6 @@ extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; extern u8 gLinkTransferringData; +extern u16 gKeyRepeatStartDelay; #endif // GUARD_MAIN_H diff --git a/ld_script.txt b/ld_script.txt index f0792ad9d..c21f61f53 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -246,6 +246,7 @@ SECTIONS { src/union_room_battle.o(.text); asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); + src/union_room_chat.o(.text); asm/union_room_chat.o(.text); src/help_system_812B1E0.o(.text); src/quest_log_battle.o(.text); @@ -534,6 +535,7 @@ SECTIONS { src/union_room_message.o(.rodata); data/pokemon_special_anim.o(.rodata); src/party_menu.o(.rodata); + src/union_room_chat.o(.rodata); data/union_room_chat.o(.rodata); src/help_system_812B1E0.o(.rodata); src/fame_checker.o(.rodata); diff --git a/src/union_room_chat.c b/src/union_room_chat.c new file mode 100644 index 000000000..813d20e5f --- /dev/null +++ b/src/union_room_chat.c @@ -0,0 +1,352 @@ +#include "global.h" +#include "gflib.h" +#include "help_system.h" +#include "link.h" +#include "link_rfu.h" +#include "list_menu.h" +#include "menu.h" +#include "quest_log.h" +#include "scanline_effect.h" +#include "task.h" +#include "constants/songs.h" + +enum +{ + UNION_ROOM_KB_PAGE_UPPER, + UNION_ROOM_KB_PAGE_LOWER, + UNION_ROOM_KB_PAGE_EMOJI, + UNION_ROOM_KB_PAGE_COUNT +}; + +struct UnionRoomChat +{ + u8 filler0[0x4]; + u16 unk4; + u16 unk6; + u8 filler8[0x2]; + u16 unkA; + u8 fillerC[0x1]; + u8 unkD; + u8 unkE; + u8 unkF; + u8 currentPage; + u8 unk11; + u8 currentRow; + u8 unk13; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; + u8 unk18; + u8 unk19; + u8 unk1A[0x1F]; + u8 unk39[0x40]; + u8 unk79[0x40]; + u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21]; + u8 filler18B[0x5]; + u8 unk190[0x28]; +}; + +EWRAM_DATA struct UnionRoomChat * gUnknown_203B0E0 = NULL; + +void sub_812845C(struct UnionRoomChat * unionRoomChat); +void c2_081284E0(void); +void sub_81285B4(void); +void sub_81285CC(void); +void sub_81285E8(u8 taskId); +void sub_8128640(void); +void sub_81286C4(void); +void sub_81287B4(void); +void sub_81288D4(void); +void sub_8128DA4(void); +void sub_8128E78(void); +void sub_8128AA0(void); +void sub_8128C04(void); +void sub_8128CA8(void); +void sub_8128FB8(void); +void sub_8129218(u16 a0); +bool32 sub_8129228(void); +void sub_81292D8(void); +void sub_81293AC(void); +void sub_81293D8(void); +void sub_8129560(u8 *ptr); +void sub_8129568(u8 *ptr); +void sub_81298F8(u8 taskId); +void sub_8129B14(void); +bool32 sub_8129B78(void); +void sub_8129BFC(void); +void sub_8129C34(u16 a0, u8 a1); +u8 sub_8129C8C(u8 a0); + +static void (*const gUnknown_845A880[])(void) = { + sub_8128640, + sub_81286C4, + sub_81287B4, + sub_81288D4, + sub_8128DA4, + sub_8128E78, + sub_8128AA0, + sub_8128C04, + sub_8128CA8, + sub_8128FB8 +}; + +void sub_8128420(void) +{ + gUnknown_203B0E0 = Alloc(sizeof(struct UnionRoomChat)); + sub_812845C(gUnknown_203B0E0); + gKeyRepeatStartDelay = 20; + sub_812B4AC(); + SetVBlankCallback(NULL); + SetMainCallback2(c2_081284E0); +} + +void sub_812845C(struct UnionRoomChat * unionRoomChat) +{ + int i; + + unionRoomChat->unk4 = 0; + unionRoomChat->unk6 = 0; + unionRoomChat->currentPage = 0; + unionRoomChat->unk11 = 0; + unionRoomChat->currentRow = 0; + unionRoomChat->unk14 = 0; + unionRoomChat->unk15 = 0; + unionRoomChat->unk16 = 0; + unionRoomChat->unk1A[0] = EOS; + unionRoomChat->unkD = GetLinkPlayerCount(); + unionRoomChat->unk13 = GetMultiplayerId(); + unionRoomChat->unk17 = 0; + unionRoomChat->unk18 = 0; + sub_8129560(unionRoomChat->unk190); + for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) + StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3AD4[i]); +} + +void sub_81284BC(void) +{ + DestroyTask(gUnknown_203B0E0->unkE); + DestroyTask(gUnknown_203B0E0->unkF); + Free(gUnknown_203B0E0); +} + +void c2_081284E0(void) +{ + switch (gMain.state) + { + case 0: + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + sub_8129B14(); + gMain.state++; + break; + case 1: + sub_8129BFC(); + if (!sub_8129B78()) + { + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + SetVBlankCallback(sub_81285B4); + gMain.state++; + } + break; + case 2: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + SetMainCallback2(sub_81285CC); + SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL); + gUnknown_203B0E0->unkE = CreateTask(sub_81285E8, 8); + gUnknown_203B0E0->unkF = CreateTask(sub_81298F8, 7); + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(232, 150); + } + break; + } +} + +void sub_81285B4(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void sub_81285CC(void) +{ + RunTasks(); + sub_8129BFC(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_81285E8(u8 taskId) +{ + switch (gUnknown_203B0E0->unk17) + { + case 1: + sub_8129218(6); + gUnknown_203B0E0->unk17 = 0; + break; + case 2: + sub_8129218(7); + gUnknown_203B0E0->unk17 = 0; + break; + case 3: + sub_8129218(8); + gUnknown_203B0E0->unk17 = 0; + break; + } + + gUnknown_845A880[gUnknown_203B0E0->unk4](); +} + +void sub_8128640(void) +{ + switch (gUnknown_203B0E0->unk6) + { + case 0: + sub_8129568(gUnknown_203B0E0->unk190); + gUnknown_203B0E0->unk6++; + // fall through + case 1: + if (IsLinkTaskFinished() && !sub_80FBA1C()) + { + if (SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) + gUnknown_203B0E0->unk6++; + } + break; + case 2: + if (IsLinkTaskFinished()) + sub_8129218(1); + break; + } +} + +void sub_81286C4(void) +{ + bool8 var0, var1; + + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (JOY_NEW(START_BUTTON)) + { + if (gUnknown_203B0E0->unk15) + sub_8129218(4); + } + else if (JOY_NEW(SELECT_BUTTON)) + { + sub_8129218(2); + } + else if (JOY_REPT(B_BUTTON)) + { + if (gUnknown_203B0E0->unk15) + { + sub_81293AC(); + sub_8129C34(8, 0); + gUnknown_203B0E0->unk6 = 1; + } + else + { + sub_8129218(3); + } + } + else if (JOY_NEW(A_BUTTON)) + { + sub_81292D8(); + sub_8129C34(8, 0); + sub_8129C34(2, 1); + gUnknown_203B0E0->unk6 = 1; + } + else if (JOY_NEW(R_BUTTON)) + { + if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + { + sub_81293D8(); + sub_8129C34(8, 0); + gUnknown_203B0E0->unk6 = 1; + } + else + { + sub_8129218(5); + } + } + else if (sub_8129228()) + { + sub_8129C34(1, 0); + gUnknown_203B0E0->unk6 = 1; + } + break; + case 1: + var0 = sub_8129C8C(0); + var1 = sub_8129C8C(1); + if (!var0 && !var1) + gUnknown_203B0E0->unk6 = 0; + break; + } +} + +void sub_81287B4(void) +{ + s16 input; + int var0; + + switch (gUnknown_203B0E0->unk6) + { + case 0: + sub_8129C34(3, 0); + gUnknown_203B0E0->unk6++; + break; + case 1: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6++; + break; + case 2: + input = Menu_ProcessInput(); + switch (input) + { + default: + sub_8129C34(4, 0); + var0 = 1; + if (gUnknown_203B0E0->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) + var0 = 0; + break; + case MENU_NOTHING_CHOSEN: + if (gMain.newKeys & SELECT_BUTTON) + { + PlaySE(SE_SELECT); + Menu_MoveCursor(1); + } + return; + case MENU_B_PRESSED: + sub_8129C34(4, 0); + gUnknown_203B0E0->unk6 = 3; + return; + } + + if (!var0) + { + gUnknown_203B0E0->unk6 = 3; + return; + } + + gUnknown_203B0E0->unk11 = 0; + gUnknown_203B0E0->currentRow = 0; + sub_8129C34(5, 1); + gUnknown_203B0E0->currentPage = input; + gUnknown_203B0E0->unk6 = 4; + break; + case 3: + if (!sub_8129C8C(0)) + sub_8129218(1); + break; + case 4: + if (!sub_8129C8C(0) && !sub_8129C8C(1)) + sub_8129218(1); + break; + } +} From 14b7ed7a5f21e2a0c81373f6861ebd0d4c6eb78c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Jan 2020 13:07:41 -0500 Subject: [PATCH 02/11] through sub_8128FB8 --- asm/union_room_chat.s | 1140 ---------------------------------------- data/data_8479668.s | 60 +-- data/union_room_chat.s | 60 +-- include/data_8479668.h | 35 ++ include/link_rfu.h | 1 + src/union_room_chat.c | 457 +++++++++++++++- 6 files changed, 550 insertions(+), 1203 deletions(-) create mode 100644 include/data_8479668.h diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 6f68a333f..47512f4c2 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5,1146 +5,6 @@ .text - thumb_func_start sub_81288D4 -sub_81288D4: @ 81288D4 - push {r4,lr} - ldr r0, _081288EC @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x6] - cmp r0, 0xA - bls _081288E2 - b _08128A94 -_081288E2: - lsls r0, 2 - ldr r1, _081288F0 @ =_081288F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081288EC: .4byte gUnknown_203B0E0 -_081288F0: .4byte _081288F4 - .align 2, 0 -_081288F4: - .4byte _08128920 - .4byte _08128938 - .4byte _08128954 - .4byte _0812899C - .4byte _08128A44 - .4byte _08128A86 - .4byte _08128A94 - .4byte _08128A94 - .4byte _081289F0 - .4byte _081289B0 - .4byte _081289D4 -_08128920: - movs r0, 0x6 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128934 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x1 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128934: .4byte gUnknown_203B0E0 -_08128938: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _08128946 - b _08128A94 -_08128946: - ldr r0, _08128950 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x2 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128950: .4byte gUnknown_203B0E0 -_08128954: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08128966 - cmp r1, 0 - ble _08128A00 - b _08128A0A -_08128966: - ldr r4, _0812898C @ =gUnknown_203B0E0 - ldr r1, [r4] - ldrb r0, [r1, 0x13] - cmp r0, 0 - bne _08128990 - movs r2, 0xC8 - lsls r2, 1 - adds r0, r1, r2 - bl sub_8129614 - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r1, [r4] - movs r0, 0x9 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_0812898C: .4byte gUnknown_203B0E0 -_08128990: - movs r2, 0xC8 - lsls r2, 1 - adds r0, r1, r2 - bl sub_81295C0 - b _08128A36 -_0812899C: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128A94 - movs r0, 0x1 - bl sub_8129218 - b _08128A94 -_081289B0: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128A94 - movs r0, 0x14 - movs r1, 0 - bl sub_8129C34 - ldr r0, _081289D0 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0xA - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_081289D0: .4byte gUnknown_203B0E0 -_081289D4: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128A94 - ldr r0, _081289EC @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x8 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_081289EC: .4byte gUnknown_203B0E0 -_081289F0: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08128A24 - cmp r1, 0 - bgt _08128A0A -_08128A00: - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08128A0E - b _08128A94 -_08128A0A: - cmp r1, 0x1 - bne _08128A94 -_08128A0E: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128A20 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128A20: .4byte gUnknown_203B0E0 -_08128A24: - bl sub_80FA4A8 - ldr r4, _08128A40 @ =gUnknown_203B0E0 - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_8129614 -_08128A36: - ldr r1, [r4] - movs r0, 0x4 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128A40: .4byte gUnknown_203B0E0 -_08128A44: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128A94 - bl sub_80FBA1C - cmp r0, 0 - bne _08128A94 - ldr r4, _08128A7C @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r2, 0xC8 - lsls r2, 1 - adds r1, r2 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _08128A94 - ldr r1, [r4] - ldrb r0, [r1, 0x13] - cmp r0, 0 - bne _08128A80 - movs r0, 0x6 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128A7C: .4byte gUnknown_203B0E0 -_08128A80: - movs r0, 0x5 - strh r0, [r1, 0x6] - b _08128A94 -_08128A86: - ldr r0, _08128A9C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128A94 - movs r0, 0x9 - bl sub_8129218 -_08128A94: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128A9C: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_81288D4 - - thumb_func_start sub_8128AA0 -sub_8128AA0: @ 8128AA0 - push {r4,lr} - ldr r1, _08128ABC @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r2, r1, 0 - cmp r0, 0x7 - bls _08128AB0 - b _08128BFC -_08128AB0: - lsls r0, 2 - ldr r1, _08128AC0 @ =_08128AC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128ABC: .4byte gUnknown_203B0E0 -_08128AC0: .4byte _08128AC4 - .align 2, 0 -_08128AC4: - .4byte _08128AE4 - .4byte _08128B08 - .4byte _08128B28 - .4byte _08128B4C - .4byte _08128B80 - .4byte _08128BA0 - .4byte _08128BC4 - .4byte _08128BE8 -_08128AE4: - ldr r0, _08128B00 @ =sub_81298F8 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _08128AF2 - b _08128BFC -_08128AF2: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128B04 @ =gUnknown_203B0E0 - ldr r1, [r0] - b _08128BDA - .align 2, 0 -_08128B00: .4byte sub_81298F8 -_08128B04: .4byte gUnknown_203B0E0 -_08128B08: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128BFC - movs r0, 0x12 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128B24 @ =gUnknown_203B0E0 - ldr r1, [r0] - b _08128BDA - .align 2, 0 -_08128B24: .4byte gUnknown_203B0E0 -_08128B28: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128BFC - ldr r4, _08128B48 @ =gUnknown_203B0E0 - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_81295EC - ldr r1, [r4] - b _08128BDA - .align 2, 0 -_08128B48: .4byte gUnknown_203B0E0 -_08128B4C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128BFC - bl sub_80FBA1C - cmp r0, 0 - bne _08128BFC - ldr r4, _08128B7C @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _08128BFC - ldr r1, [r4] - b _08128BDA - .align 2, 0 -_08128B7C: .4byte gUnknown_203B0E0 -_08128B80: - bl GetBlockReceivedStatus - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08128BFC - bl sub_80FBA1C - cmp r0, 0 - bne _08128BFC - ldr r0, _08128B9C @ =gUnknown_203B0E0 - ldr r1, [r0] - b _08128BDA - .align 2, 0 -_08128B9C: .4byte gUnknown_203B0E0 -_08128BA0: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128BFC - bl sub_80FBA1C - adds r4, r0, 0 - cmp r4, 0 - bne _08128BFC - bl sub_800AAC0 - ldr r0, _08128BC0 @ =gUnknown_203B0E0 - ldr r1, [r0] - strh r4, [r1, 0xA] - b _08128BDA - .align 2, 0 -_08128BC0: .4byte gUnknown_203B0E0 -_08128BC4: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bhi _08128BD0 - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128BD0: - ldr r0, _08128BE4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128BFC - ldr r1, [r2] -_08128BDA: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128BFC - .align 2, 0 -_08128BE4: .4byte gReceivedRemoteLinkPlayers -_08128BE8: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bls _08128BF8 - movs r0, 0x9 - bl sub_8129218 - b _08128BFC -_08128BF8: - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128BFC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128AA0 - - thumb_func_start sub_8128C04 -sub_8128C04: @ 8128C04 - push {r4,r5,lr} - ldr r5, _08128C1C @ =gUnknown_203B0E0 - ldr r1, [r5] - ldrh r0, [r1, 0x6] - cmp r0, 0x1 - beq _08128C44 - cmp r0, 0x1 - bgt _08128C20 - cmp r0, 0 - beq _08128C2A - b _08128CA2 - .align 2, 0 -_08128C1C: .4byte gUnknown_203B0E0 -_08128C20: - cmp r0, 0x2 - beq _08128C6E - cmp r0, 0x3 - beq _08128C90 - b _08128CA2 -_08128C2A: - ldr r0, _08128C40 @ =sub_81298F8 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08128CA2 - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - b _08128C80 - .align 2, 0 -_08128C40: .4byte sub_81298F8 -_08128C44: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128CA2 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128CA2 - bl sub_80FBA1C - adds r4, r0, 0 - cmp r4, 0 - bne _08128CA2 - bl sub_800AAC0 - ldr r1, [r5] - strh r4, [r1, 0xA] - b _08128C82 -_08128C6E: - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bhi _08128C78 - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128C78: - ldr r0, _08128C8C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128CA2 -_08128C80: - ldr r1, [r5] -_08128C82: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128CA2 - .align 2, 0 -_08128C8C: .4byte gReceivedRemoteLinkPlayers -_08128C90: - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bls _08128C9E - movs r0, 0x9 - bl sub_8129218 - b _08128CA2 -_08128C9E: - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128CA2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8128C04 - - thumb_func_start sub_8128CA8 -sub_8128CA8: @ 8128CA8 - push {r4,lr} - ldr r1, _08128CC0 @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r2, r1, 0 - cmp r0, 0x4 - bhi _08128D9C - lsls r0, 2 - ldr r1, _08128CC4 @ =_08128CC8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128CC0: .4byte gUnknown_203B0E0 -_08128CC4: .4byte _08128CC8 - .align 2, 0 -_08128CC8: - .4byte _08128CDC - .4byte _08128D08 - .4byte _08128D30 - .4byte _08128D64 - .4byte _08128D88 -_08128CDC: - ldr r0, _08128D00 @ =sub_81298F8 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08128D9C - ldr r4, _08128D04 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08128CFA - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 -_08128CFA: - ldr r1, [r4] - b _08128D7A - .align 2, 0 -_08128D00: .4byte sub_81298F8 -_08128D04: .4byte gUnknown_203B0E0 -_08128D08: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128D9C - ldr r4, _08128D2C @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08128D26 - movs r0, 0x13 - movs r1, 0 - bl sub_8129C34 -_08128D26: - ldr r1, [r4] - b _08128D7A - .align 2, 0 -_08128D2C: .4byte gUnknown_203B0E0 -_08128D30: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08128D9C - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128D9C - bl sub_80FBA1C - adds r4, r0, 0 - cmp r4, 0 - bne _08128D9C - bl sub_800AAC0 - ldr r0, _08128D60 @ =gUnknown_203B0E0 - ldr r1, [r0] - strh r4, [r1, 0xA] - b _08128D7A - .align 2, 0 -_08128D60: .4byte gUnknown_203B0E0 -_08128D64: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bhi _08128D70 - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128D70: - ldr r0, _08128D84 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128D9C - ldr r1, [r2] -_08128D7A: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128D9C - .align 2, 0 -_08128D84: .4byte gReceivedRemoteLinkPlayers -_08128D88: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bls _08128D98 - movs r0, 0x9 - bl sub_8129218 - b _08128D9C -_08128D98: - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128D9C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128CA8 - - thumb_func_start sub_8128DA4 -sub_8128DA4: @ 8128DA4 - push {r4,lr} - ldr r1, _08128DBC @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r4, r1, 0 - cmp r0, 0x4 - bhi _08128E70 - lsls r0, 2 - ldr r1, _08128DC0 @ =_08128DC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128DBC: .4byte gUnknown_203B0E0 -_08128DC0: .4byte _08128DC4 - .align 2, 0 -_08128DC4: - .4byte _08128DD8 - .4byte _08128E00 - .4byte _08128E34 - .4byte _08128E42 - .4byte _08128E60 -_08128DD8: - ldr r0, _08128DE8 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128DEC - movs r0, 0x1 - bl sub_8129218 - b _08128E70 - .align 2, 0 -_08128DE8: .4byte gReceivedRemoteLinkPlayers -_08128DEC: - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_8129590 - ldr r1, [r4] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] -_08128E00: - bl IsLinkTaskFinished - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08128E70 - bl sub_80FBA1C - cmp r0, 0 - bne _08128E70 - ldr r4, _08128E30 @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _08128E70 - ldr r1, [r4] - b _08128E52 - .align 2, 0 -_08128E30: .4byte gUnknown_203B0E0 -_08128E34: - bl sub_8129454 - movs r0, 0x8 - movs r1, 0 - bl sub_8129C34 - b _08128E4E -_08128E42: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128E70 -_08128E4E: - ldr r0, _08128E5C @ =gUnknown_203B0E0 - ldr r1, [r0] -_08128E52: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128E70 - .align 2, 0 -_08128E5C: .4byte gUnknown_203B0E0 -_08128E60: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128E70 - movs r0, 0x1 - bl sub_8129218 -_08128E70: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128DA4 - - thumb_func_start sub_8128E78 -sub_8128E78: @ 8128E78 - push {r4,lr} - ldr r0, _08128E90 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x6] - cmp r0, 0x6 - bls _08128E86 - b _08128FA8 -_08128E86: - lsls r0, 2 - ldr r1, _08128E94 @ =_08128E98 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128E90: .4byte gUnknown_203B0E0 -_08128E94: .4byte _08128E98 - .align 2, 0 -_08128E98: - .4byte _08128EB4 - .4byte _08128EE4 - .4byte _08128F38 - .4byte _08128F50 - .4byte _08128F60 - .4byte _08128F74 - .4byte _08128F8C -_08128EB4: - bl sub_8129408 - cmp r0, 0 - beq _08128ED0 - movs r0, 0x9 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128ECC @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x2 - b _08128FA6 - .align 2, 0 -_08128ECC: .4byte gUnknown_203B0E0 -_08128ED0: - movs r0, 0xD - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128EE0 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x5 - b _08128FA6 - .align 2, 0 -_08128EE0: .4byte gUnknown_203B0E0 -_08128EE4: - ldr r0, _08128F04 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08128F0C - bl sub_8129424 - movs r0, 0xB - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128F08 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - b _08128FA6 - .align 2, 0 -_08128F04: .4byte gMain -_08128F08: .4byte gUnknown_203B0E0 -_08128F0C: - movs r4, 0x2 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08128F1A - movs r0, 0xA - b _08128F9A -_08128F1A: - bl sub_8129228 - cmp r0, 0 - beq _08128FA8 - movs r0, 0x1 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128F34 @ =gUnknown_203B0E0 - ldr r0, [r0] - strh r4, [r0, 0x6] - b _08128FA8 - .align 2, 0 -_08128F34: .4byte gUnknown_203B0E0 -_08128F38: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - ldr r0, _08128F4C @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x1 - b _08128FA6 - .align 2, 0 -_08128F4C: .4byte gUnknown_203B0E0 -_08128F50: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - movs r0, 0xA - b _08128F9A -_08128F60: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - movs r0, 0x1 - bl sub_8129218 - b _08128FA8 -_08128F74: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - ldr r0, _08128F88 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x6 - b _08128FA6 - .align 2, 0 -_08128F88: .4byte gUnknown_203B0E0 -_08128F8C: - ldr r0, _08128FB0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08128FA8 - movs r0, 0x7 -_08128F9A: - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128FB4 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x4 -_08128FA6: - strh r0, [r1, 0x6] -_08128FA8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128FB0: .4byte gMain -_08128FB4: .4byte gUnknown_203B0E0 - thumb_func_end sub_8128E78 - - thumb_func_start sub_8128FB8 -sub_8128FB8: @ 8128FB8 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08128FD4 @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r4, r1, 0 - cmp r0, 0xD - bls _08128FCA - b _08129206 -_08128FCA: - lsls r0, 2 - ldr r1, _08128FD8 @ =_08128FDC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128FD4: .4byte gUnknown_203B0E0 -_08128FD8: .4byte _08128FDC - .align 2, 0 -_08128FDC: - .4byte _08129014 - .4byte _0812902E - .4byte _08129054 - .4byte _08129098 - .4byte _081290BC - .4byte _081290D8 - .4byte _0812911C - .4byte _08129144 - .4byte _08129168 - .4byte _08129180 - .4byte _081291A4 - .4byte _081291B2 - .4byte _081291C8 - .4byte _081291E8 -_08129014: - ldr r1, [r4] - ldrb r0, [r1, 0x18] - cmp r0, 0 - bne _0812901E - b _081291C2 -_0812901E: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x6] - b _08129206 -_0812902E: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _0812903C - b _08129206 -_0812903C: - movs r0, 0xE - movs r1, 0 - bl sub_8129C34 - ldr r0, _08129050 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x2 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129050: .4byte gUnknown_203B0E0 -_08129054: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08129080 - cmp r1, 0 - bgt _0812906E - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08129074 - b _08129206 -_0812906E: - cmp r1, 0x1 - beq _08129074 - b _08129206 -_08129074: - ldr r0, _0812907C @ =gUnknown_203B0E0 - ldr r1, [r0] - b _081291C2 - .align 2, 0 -_0812907C: .4byte gUnknown_203B0E0 -_08129080: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08129094 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129094: .4byte gUnknown_203B0E0 -_08129098: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _081290A6 - b _08129206 -_081290A6: - movs r0, 0xF - movs r1, 0 - bl sub_8129C34 - ldr r0, _081290B8 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x4 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081290B8: .4byte gUnknown_203B0E0 -_081290BC: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _081290CA - b _08129206 -_081290CA: - ldr r0, _081290D4 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x5 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081290D4: .4byte gUnknown_203B0E0 -_081290D8: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08129104 - cmp r1, 0 - bgt _081290F2 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _081290F8 - b _08129206 -_081290F2: - cmp r1, 0x1 - beq _081290F8 - b _08129206 -_081290F8: - ldr r0, _08129100 @ =gUnknown_203B0E0 - ldr r1, [r0] - b _081291C2 - .align 2, 0 -_08129100: .4byte gUnknown_203B0E0 -_08129104: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08129118 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x6 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129118: .4byte gUnknown_203B0E0 -_0812911C: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129206 - movs r0, 0x10 - movs r1, 0 - bl sub_8129C34 - bl sub_8129470 - ldr r0, _08129140 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x7 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129140: .4byte gUnknown_203B0E0 -_08129144: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129206 - bl SetContinueGameWarpStatusToDynamicWarp - movs r0, 0 - bl TrySavingData - ldr r0, _08129164 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x8 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129164: .4byte gUnknown_203B0E0 -_08129168: - movs r0, 0x11 - movs r1, 0 - bl sub_8129C34 - ldr r0, _0812917C @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x9 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_0812917C: .4byte gUnknown_203B0E0 -_08129180: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129206 - movs r0, 0x30 - bl PlaySE - bl ClearContinueGameWarpStatus2 - ldr r0, _081291A0 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0xA - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081291A0: .4byte gUnknown_203B0E0 -_081291A4: - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0x19] - ldr r1, [r4] - movs r0, 0xB - strh r0, [r1, 0x6] - b _08129206 -_081291B2: - ldr r0, [r4] - ldrb r1, [r0, 0x19] - adds r1, 0x1 - strb r1, [r0, 0x19] - ldr r1, [r4] - ldrb r0, [r1, 0x19] - cmp r0, 0x78 - bls _08129206 -_081291C2: - movs r0, 0xC - strh r0, [r1, 0x6] - b _08129206 -_081291C8: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _081291E4 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0xD - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081291E4: .4byte gUnknown_203B0E0 -_081291E8: - ldr r0, _08129210 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08129206 - bl sub_812B4B8 - bl sub_8129B88 - bl sub_81284BC - ldr r0, _08129214 @ =CB2_ReturnToField - bl SetMainCallback2 -_08129206: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129210: .4byte gPaletteFade -_08129214: .4byte CB2_ReturnToField - thumb_func_end sub_8128FB8 - thumb_func_start sub_8129218 sub_8129218: @ 8129218 ldr r1, _08129224 @ =gUnknown_203B0E0 diff --git a/data/data_8479668.s b/data/data_8479668.s index 8527b4f09..393a5cc44 100644 --- a/data/data_8479668.s +++ b/data/data_8479668.s @@ -75,64 +75,64 @@ gUnknown_847AA8F:: gUnknown_847AAA8:: .string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $" -gUnknown_847AAC1:: +gText_UnionRoomChatKeyboard_ABCDE:: .string "ABCDE$" -gUnknown_847AAC7:: +gText_UnionRoomChatKeyboard_FGHIJ:: .string "FGHIJ$" -gUnknown_847AACD:: +gText_UnionRoomChatKeyboard_KLMNO:: .string "KLMNO$" -gUnknown_847AAD3:: +gText_UnionRoomChatKeyboard_PQRST:: .string "PQRST$" -gUnknown_847AAD9:: +gText_UnionRoomChatKeyboard_UVWXY:: .string "UVWXY$" -gUnknown_847AADF:: +gText_UnionRoomChatKeyboard_Z:: .string "Z $" -gUnknown_847AAE5:: +gText_UnionRoomChatKeyboard_01234Upper:: .string "01234$" -gUnknown_847AAEB:: +gText_UnionRoomChatKeyboard_56789Upper:: .string "56789$" -gUnknown_847AAF1:: +gText_UnionRoomChatKeyboard_PunctuationUpper:: .string ".,!? $" -gUnknown_847AAF7:: +gText_UnionRoomChatKeyboard_SymbolsUpper:: .string "-/&… $" -gUnknown_847AAFD:: +gText_UnionRoomChatKeyboard_abcde:: .string "abcde$" -gUnknown_847AB03:: +gText_UnionRoomChatKeyboard_fghij:: .string "fghij$" -gUnknown_847AB09:: +gText_UnionRoomChatKeyboard_klmno:: .string "klmno$" -gUnknown_847AB0F:: +gText_UnionRoomChatKeyboard_pqrst:: .string "pqrst$" -gUnknown_847AB15:: +gText_UnionRoomChatKeyboard_uvwxy:: .string "uvwxy$" -gUnknown_847AB1B:: +gText_UnionRoomChatKeyboard_z:: .string "z $" -gUnknown_847AB21:: +gText_UnionRoomChatKeyboard_01234Lower:: .string "01234$" -gUnknown_847AB27:: +gText_UnionRoomChatKeyboard_56789Lower:: .string "56789$" -gUnknown_847AB2D:: +gText_UnionRoomChatKeyboard_PunctuationLower:: .string ".,!? $" -gUnknown_847AB33:: +gText_UnionRoomChatKeyboard_SymbolsLower:: .string "-/&… $" .string "$" @@ -144,34 +144,34 @@ gUnknown_847AB33:: .string "$" .string "$" -gUnknown_847AB41:: +gText_UnionRoomChatKeyboard_Emoji1:: .string "{EXTRA 245}{EXTRA 246}{EXTRA 247}{EXTRA 248}{EXTRA 254}$" -gUnknown_847AB4C:: +gText_UnionRoomChatKeyboard_Emoji2:: .string "{EXTRA 249}{EXTRA 250}{EXTRA 252}{EXTRA 251}{EXTRA 253}$" -gUnknown_847AB57:: +gText_UnionRoomChatKeyboard_Emoji3:: .string "{EXTRA 236}{EXTRA 237}{EXTRA 238}{EXTRA 235}{EXTRA 234}$" -gUnknown_847AB62:: +gText_UnionRoomChatKeyboard_Emoji4:: .string "♂♀{EXTRA 212}{EXTRA 213}{EXTRA 211}$" -gUnknown_847AB6B:: +gText_UnionRoomChatKeyboard_Emoji5:: .string "{EXTRA 216}{EXTRA 217}{EXTRA 242}{EXTRA 243}{EXTRA 244}$" -gUnknown_847AB76:: +gText_UnionRoomChatKeyboard_Emoji6:: .string "{EXTRA 218}{EXTRA 241}{EXTRA 224}{EXTRA 226}{EXTRA 227}$" -gUnknown_847AB81:: +gText_UnionRoomChatKeyboard_Emoji7:: .string "{EXTRA 240}{EXTRA 239}{EXTRA 225}{EXTRA 214}{EXTRA 215}$" -gUnknown_847AB8C:: +gText_UnionRoomChatKeyboard_Emoji8:: .string "{EXTRA 228}{EXTRA 229}{EXTRA 230}{EXTRA 231}{EXTRA 232}$" -gUnknown_847AB97:: +gText_UnionRoomChatKeyboard_Emoji9:: .string "{EXTRA 233}{EXTRA 220}{EXTRA 221}{EXTRA 222}{EXTRA 209}$" -gUnknown_847ABA2:: +gText_UnionRoomChatKeyboard_Emoji10:: .string "{EXTRA 210}{EXTRA 208}ょ: $" // trainer_tower (again?) diff --git a/data/union_room_chat.s b/data/union_room_chat.s index 84f9d9c39..9c23697ee 100644 --- a/data/union_room_chat.s +++ b/data/union_room_chat.s @@ -44,36 +44,36 @@ gUnknown_845A8AC:: @ 845A8AC .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 gUnknown_845A9AC:: @ 845A9AC - .4byte gUnknown_847AAC1 - .4byte gUnknown_847AAC7 - .4byte gUnknown_847AACD - .4byte gUnknown_847AAD3 - .4byte gUnknown_847AAD9 - .4byte gUnknown_847AADF - .4byte gUnknown_847AAE5 - .4byte gUnknown_847AAEB - .4byte gUnknown_847AAF1 - .4byte gUnknown_847AAF7 - .4byte gUnknown_847AAFD - .4byte gUnknown_847AB03 - .4byte gUnknown_847AB09 - .4byte gUnknown_847AB0F - .4byte gUnknown_847AB15 - .4byte gUnknown_847AB1B - .4byte gUnknown_847AB21 - .4byte gUnknown_847AB27 - .4byte gUnknown_847AB2D - .4byte gUnknown_847AB33 - .4byte gUnknown_847AB41 - .4byte gUnknown_847AB4C - .4byte gUnknown_847AB57 - .4byte gUnknown_847AB62 - .4byte gUnknown_847AB6B - .4byte gUnknown_847AB76 - .4byte gUnknown_847AB81 - .4byte gUnknown_847AB8C - .4byte gUnknown_847AB97 - .4byte gUnknown_847ABA2 + .4byte gText_UnionRoomChatKeyboard_ABCDE + .4byte gText_UnionRoomChatKeyboard_FGHIJ + .4byte gText_UnionRoomChatKeyboard_KLMNO + .4byte gText_UnionRoomChatKeyboard_PQRST + .4byte gText_UnionRoomChatKeyboard_UVWXY + .4byte gText_UnionRoomChatKeyboard_Z + .4byte gText_UnionRoomChatKeyboard_01234Upper + .4byte gText_UnionRoomChatKeyboard_56789Upper + .4byte gText_UnionRoomChatKeyboard_PunctuationUpper + .4byte gText_UnionRoomChatKeyboard_SymbolsUpper + .4byte gText_UnionRoomChatKeyboard_abcde + .4byte gText_UnionRoomChatKeyboard_fghij + .4byte gText_UnionRoomChatKeyboard_klmno + .4byte gText_UnionRoomChatKeyboard_pqrst + .4byte gText_UnionRoomChatKeyboard_uvwxy + .4byte gText_UnionRoomChatKeyboard_z + .4byte gText_UnionRoomChatKeyboard_01234Lower + .4byte gText_UnionRoomChatKeyboard_56789Lower + .4byte gText_UnionRoomChatKeyboard_PunctuationLower + .4byte gText_UnionRoomChatKeyboard_SymbolsLower + .4byte gText_UnionRoomChatKeyboard_Emoji1 + .4byte gText_UnionRoomChatKeyboard_Emoji2 + .4byte gText_UnionRoomChatKeyboard_Emoji3 + .4byte gText_UnionRoomChatKeyboard_Emoji4 + .4byte gText_UnionRoomChatKeyboard_Emoji5 + .4byte gText_UnionRoomChatKeyboard_Emoji6 + .4byte gText_UnionRoomChatKeyboard_Emoji7 + .4byte gText_UnionRoomChatKeyboard_Emoji8 + .4byte gText_UnionRoomChatKeyboard_Emoji9 + .4byte gText_UnionRoomChatKeyboard_Emoji10 gUnknown_845AA24:: @ 845AA24 .incbin "graphics/union_room_chat/unk_845AA24.gbapal" diff --git a/include/data_8479668.h b/include/data_8479668.h new file mode 100644 index 000000000..1a1f44267 --- /dev/null +++ b/include/data_8479668.h @@ -0,0 +1,35 @@ +#ifndef GUARD_DATA_8479668_H +#define GUARD_DATA_8479668_H + +extern const u8 gText_UnionRoomChatKeyboard_ABCDE[]; +extern const u8 gText_UnionRoomChatKeyboard_FGHIJ[]; +extern const u8 gText_UnionRoomChatKeyboard_KLMNO[]; +extern const u8 gText_UnionRoomChatKeyboard_PQRST[]; +extern const u8 gText_UnionRoomChatKeyboard_UVWXY[]; +extern const u8 gText_UnionRoomChatKeyboard_Z[]; +extern const u8 gText_UnionRoomChatKeyboard_01234Upper[]; +extern const u8 gText_UnionRoomChatKeyboard_56789Upper[]; +extern const u8 gText_UnionRoomChatKeyboard_PunctuationUpper[]; +extern const u8 gText_UnionRoomChatKeyboard_SymbolsUpper[]; +extern const u8 gText_UnionRoomChatKeyboard_abcde[]; +extern const u8 gText_UnionRoomChatKeyboard_fghij[]; +extern const u8 gText_UnionRoomChatKeyboard_klmno[]; +extern const u8 gText_UnionRoomChatKeyboard_pqrst[]; +extern const u8 gText_UnionRoomChatKeyboard_uvwxy[]; +extern const u8 gText_UnionRoomChatKeyboard_z[]; +extern const u8 gText_UnionRoomChatKeyboard_01234Lower[]; +extern const u8 gText_UnionRoomChatKeyboard_56789Lower[]; +extern const u8 gText_UnionRoomChatKeyboard_PunctuationLower[]; +extern const u8 gText_UnionRoomChatKeyboard_SymbolsLower[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji1[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji2[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji3[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji4[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji5[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji6[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji7[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji8[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji9[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji10[]; + +#endif //GUARD_DATA_8479668_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 2e502165a..9dac781b3 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -326,6 +326,7 @@ bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx); bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx); bool32 sub_80FBA1C(void); +void sub_80FA4A8(void); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 813d20e5f..cd285267a 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -4,8 +4,11 @@ #include "link.h" #include "link_rfu.h" #include "list_menu.h" +#include "load_save.h" #include "menu.h" +#include "overworld.h" #include "quest_log.h" +#include "save.h" #include "scanline_effect.h" #include "task.h" #include "constants/songs.h" @@ -58,25 +61,35 @@ void sub_8128640(void); void sub_81286C4(void); void sub_81287B4(void); void sub_81288D4(void); -void sub_8128DA4(void); -void sub_8128E78(void); void sub_8128AA0(void); void sub_8128C04(void); void sub_8128CA8(void); +void sub_8128DA4(void); +void sub_8128E78(void); void sub_8128FB8(void); void sub_8129218(u16 a0); bool32 sub_8129228(void); void sub_81292D8(void); void sub_81293AC(void); void sub_81293D8(void); +bool32 sub_8129408(void); +void sub_8129424(void); +void sub_8129454(void); +void sub_8129470(void); void sub_8129560(u8 *ptr); void sub_8129568(u8 *ptr); +void sub_8129590(u8 *ptr); +void sub_81295C0(u8 *ptr); +void sub_81295EC(u8 *ptr); +void sub_8129614(u8 *ptr); void sub_81298F8(u8 taskId); void sub_8129B14(void); bool32 sub_8129B78(void); +void sub_8129B88(void); void sub_8129BFC(void); void sub_8129C34(u16 a0, u8 a1); u8 sub_8129C8C(u8 a0); +s8 sub_812A568(void); static void (*const gUnknown_845A880[])(void) = { sub_8128640, @@ -316,7 +329,7 @@ void sub_81287B4(void) var0 = 0; break; case MENU_NOTHING_CHOSEN: - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -350,3 +363,441 @@ void sub_81287B4(void) break; } } + +void sub_81288D4(void) +{ + s8 input; + + switch (gUnknown_203B0E0->unk6) + { + case 0: + sub_8129C34(6, 0); + gUnknown_203B0E0->unk6 = 1; + break; + case 1: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6 = 2; + break; + case 2: + input = sub_812A568(); + switch (input) + { + case -1: + case 1: + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 3; + break; + case 0: + if (gUnknown_203B0E0->unk13 == 0) + { + sub_8129614(gUnknown_203B0E0->unk190); + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 9; + } + else + { + sub_81295C0(gUnknown_203B0E0->unk190); + gUnknown_203B0E0->unk6 = 4; + } + break; + } + break; + case 3: + if (!sub_8129C8C(0)) + sub_8129218(1); + break; + case 9: + if (!sub_8129C8C(0)) + { + sub_8129C34(20, 0); + gUnknown_203B0E0->unk6 = 10; + } + break; + case 10: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6 = 8; + break; + case 8: + input = sub_812A568(); + switch (input) + { + case -1: + case 1: + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 3; + break; + case 0: + sub_80FA4A8(); + sub_8129614(gUnknown_203B0E0->unk190); + gUnknown_203B0E0->unk6 = 4; + break; + } + break; + case 4: + if (IsLinkTaskFinished() && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) + { + if (!gUnknown_203B0E0->unk13) + gUnknown_203B0E0->unk6 = 6; + else + gUnknown_203B0E0->unk6 = 5; + } + break; + case 5: + if (!gReceivedRemoteLinkPlayers) + { + sub_8129218(9); + } + break; + } +} + +void sub_8128AA0(void) +{ + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (!FuncIsActiveTask(sub_81298F8)) + { + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6++; + } + break; + case 1: + if (!sub_8129C8C(0)) + { + sub_8129C34(18, 0); + gUnknown_203B0E0->unk6++; + } + break; + case 2: + if (!sub_8129C8C(0)) + { + sub_81295EC(gUnknown_203B0E0->unk190); + gUnknown_203B0E0->unk6++; + } + break; + case 3: + if (IsLinkTaskFinished() && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) + gUnknown_203B0E0->unk6++; + break; + case 4: + if ((GetBlockReceivedStatus() & 1) && !sub_80FBA1C()) + gUnknown_203B0E0->unk6++; + break; + case 5: + if (IsLinkTaskFinished() && !sub_80FBA1C()) + { + sub_800AAC0(); + gUnknown_203B0E0->unkA = 0; + gUnknown_203B0E0->unk6++; + } + break; + case 6: + if (gUnknown_203B0E0->unkA < 150) + gUnknown_203B0E0->unkA++; + + if (!gReceivedRemoteLinkPlayers) + gUnknown_203B0E0->unk6++; + break; + case 7: + if (gUnknown_203B0E0->unkA >= 150) + sub_8129218(9); + else + gUnknown_203B0E0->unkA++; + break; + } +} + +void sub_8128C04(void) +{ + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (!FuncIsActiveTask(sub_81298F8)) + { + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6++; + } + break; + case 1: + if (!sub_8129C8C(0) && IsLinkTaskFinished() && !sub_80FBA1C()) + { + sub_800AAC0(); + gUnknown_203B0E0->unkA = 0; + gUnknown_203B0E0->unk6++; + } + break; + case 2: + if (gUnknown_203B0E0->unkA < 150) + gUnknown_203B0E0->unkA++; + + if (!gReceivedRemoteLinkPlayers) + gUnknown_203B0E0->unk6++; + break; + case 3: + if (gUnknown_203B0E0->unkA >= 150) + sub_8129218(9); + else + gUnknown_203B0E0->unkA++; + break; + } +} + +void sub_8128CA8(void) +{ + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (!FuncIsActiveTask(sub_81298F8)) + { + if (gUnknown_203B0E0->unk13) + sub_8129C34(7, 0); + + gUnknown_203B0E0->unk6++; + } + break; + case 1: + if (!sub_8129C8C(0)) + { + if (gUnknown_203B0E0->unk13) + sub_8129C34(19, 0); + + gUnknown_203B0E0->unk6++; + } + break; + case 2: + if (sub_8129C8C(0) != TRUE && IsLinkTaskFinished() && !sub_80FBA1C()) + { + sub_800AAC0(); + gUnknown_203B0E0->unkA = 0; + gUnknown_203B0E0->unk6++; + } + break; + case 3: + if (gUnknown_203B0E0->unkA < 150) + gUnknown_203B0E0->unkA++; + + if (!gReceivedRemoteLinkPlayers) + gUnknown_203B0E0->unk6++; + break; + case 4: + if (gUnknown_203B0E0->unkA >= 150) + sub_8129218(9); + else + gUnknown_203B0E0->unkA++; + break; + } +} + +void sub_8128DA4(void) +{ + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + sub_8129218(1); + break; + } + + sub_8129590(gUnknown_203B0E0->unk190); + gUnknown_203B0E0->unk6++; + // fall through + case 1: + if (IsLinkTaskFinished() == TRUE && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) + gUnknown_203B0E0->unk6++; + break; + case 2: + sub_8129454(); + sub_8129C34(8, 0); + gUnknown_203B0E0->unk6++; + break; + case 3: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6++; + break; + case 4: + if (IsLinkTaskFinished()) + sub_8129218(1); + break; + } +} + +void sub_8128E78(void) +{ + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (sub_8129408()) + { + sub_8129C34(9, 0); + gUnknown_203B0E0->unk6 = 2; + } + else + { + sub_8129C34(13, 0); + gUnknown_203B0E0->unk6 = 5; + } + break; + case 1: + if (JOY_NEW(A_BUTTON)) + { + sub_8129424(); + sub_8129C34(11, 0); + gUnknown_203B0E0->unk6 = 3; + } + else if (JOY_NEW(B_BUTTON)) + { + sub_8129C34(10, 0); + gUnknown_203B0E0->unk6 = 4; + } + else if (sub_8129228()) + { + sub_8129C34(1, 0); + gUnknown_203B0E0->unk6 = 2; + } + break; + case 2: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6 = 1; + break; + case 3: + if (!sub_8129C8C(0)) + { + sub_8129C34(10, 0); + gUnknown_203B0E0->unk6 = 4; + } + break; + case 4: + if (!sub_8129C8C(0)) + sub_8129218(1); + break; + case 5: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6 = 6; + break; + case 6: + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 4; + } + break; + } +} + +void sub_8128FB8(void) +{ + s8 input; + + switch (gUnknown_203B0E0->unk6) + { + case 0: + if (!gUnknown_203B0E0->unk18) + { + gUnknown_203B0E0->unk6 = 12; + } + else + { + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 1; + } + break; + case 1: + if (!sub_8129C8C(0)) + { + sub_8129C34(14, 0); + gUnknown_203B0E0->unk6 = 2; + } + break; + case 2: + input = sub_812A568(); + switch (input) + { + case -1: + case 1: + gUnknown_203B0E0->unk6 = 12; + break; + case 0: + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 3; + break; + } + break; + case 3: + if (!sub_8129C8C(0)) + { + sub_8129C34(15, 0); + gUnknown_203B0E0->unk6 = 4; + } + break; + case 4: + if (!sub_8129C8C(0)) + gUnknown_203B0E0->unk6 = 5; + break; + case 5: + input = sub_812A568(); + switch (input) + { + case -1: + case 1: + gUnknown_203B0E0->unk6 = 12; + break; + case 0: + sub_8129C34(7, 0); + gUnknown_203B0E0->unk6 = 6; + break; + } + break; + case 6: + if (!sub_8129C8C(0)) + { + sub_8129C34(16, 0); + sub_8129470(); + gUnknown_203B0E0->unk6 = 7; + } + break; + case 7: + if (!sub_8129C8C(0)) + { + SetContinueGameWarpStatusToDynamicWarp(); + TrySavingData(SAVE_NORMAL); + gUnknown_203B0E0->unk6 = 8; + } + break; + case 8: + sub_8129C34(17, 0); + gUnknown_203B0E0->unk6 = 9; + break; + case 9: + if (!sub_8129C8C(0)) + { + PlaySE(SE_SAVE); + ClearContinueGameWarpStatus2(); + gUnknown_203B0E0->unk6 = 10; + } + break; + case 10: + gUnknown_203B0E0->unk19 = 0; + gUnknown_203B0E0->unk6 = 11; + break; + case 11: + gUnknown_203B0E0->unk19++; + if (gUnknown_203B0E0->unk19 > 120) + gUnknown_203B0E0->unk6 = 12; + break; + case 12: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + gUnknown_203B0E0->unk6 = 13; + break; + case 13: + if (!gPaletteFade.active) + { + sub_812B4B8(); + sub_8129B88(); + sub_81284BC(); + SetMainCallback2(CB2_ReturnToField); + } + break; + } +} From d22dd0f08b6e08b75b6db8391022b9662e6879ce Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Jan 2020 17:03:03 -0500 Subject: [PATCH 03/11] through sub_8129560 --- asm/union_room_chat.s | 491 +---------------------------------------- data/union_room_chat.s | 69 ------ include/text.h | 14 ++ src/union_room_chat.c | 311 ++++++++++++++++++++++++++ 4 files changed, 327 insertions(+), 558 deletions(-) diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 47512f4c2..24e341f0d 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5,493 +5,6 @@ .text - thumb_func_start sub_8129218 -sub_8129218: @ 8129218 - ldr r1, _08129224 @ =gUnknown_203B0E0 - ldr r1, [r1] - movs r2, 0 - strh r0, [r1, 0x4] - strh r2, [r1, 0x6] - bx lr - .align 2, 0 -_08129224: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129218 - - thumb_func_start sub_8129228 -sub_8129228: @ 8129228 - push {lr} - ldr r0, _08129258 @ =gMain - ldrh r2, [r0, 0x30] - movs r0, 0x40 - ands r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - bne _081292B2 - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - beq _08129268 - ldr r0, _0812925C @ =gUnknown_203B0E0 - ldr r2, [r0] - ldr r1, _08129260 @ =gUnknown_845A8A8 - ldrb r0, [r2, 0x10] - adds r0, r1 - ldrb r1, [r2, 0x12] - ldrb r0, [r0] - cmp r1, r0 - bcs _08129264 - adds r0, r1, 0x1 - b _081292CC - .align 2, 0 -_08129258: .4byte gMain -_0812925C: .4byte gUnknown_203B0E0 -_08129260: .4byte gUnknown_845A8A8 -_08129264: - strb r3, [r2, 0x12] - b _081292CE -_08129268: - ldr r0, _0812928C @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x10] - cmp r0, 0x3 - beq _081292AE - movs r0, 0x20 - ands r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - beq _08129296 - ldrb r0, [r1, 0x11] - cmp r0, 0 - beq _08129290 - subs r0, 0x1 - strb r0, [r1, 0x11] - b _081292CE - .align 2, 0 -_0812928C: .4byte gUnknown_203B0E0 -_08129290: - movs r0, 0x4 - strb r0, [r1, 0x11] - b _081292CE -_08129296: - movs r0, 0x10 - ands r0, r2 - cmp r0, 0 - beq _081292AE - ldrb r0, [r1, 0x11] - cmp r0, 0x3 - bhi _081292AA - adds r0, 0x1 - strb r0, [r1, 0x11] - b _081292CE -_081292AA: - strb r3, [r1, 0x11] - b _081292CE -_081292AE: - movs r0, 0 - b _081292D0 -_081292B2: - ldr r0, _081292C0 @ =gUnknown_203B0E0 - ldr r2, [r0] - ldrb r0, [r2, 0x12] - cmp r0, 0 - beq _081292C4 - subs r0, 0x1 - b _081292CC - .align 2, 0 -_081292C0: .4byte gUnknown_203B0E0 -_081292C4: - ldr r0, _081292D4 @ =gUnknown_845A8A8 - ldrb r1, [r2, 0x10] - adds r1, r0 - ldrb r0, [r1] -_081292CC: - strb r0, [r2, 0x12] -_081292CE: - movs r0, 0x1 -_081292D0: - pop {r1} - bx r1 - .align 2, 0 -_081292D4: .4byte gUnknown_845A8A8 - thumb_func_end sub_8129228 - - thumb_func_start sub_81292D8 -sub_81292D8: @ 81292D8 - push {r4-r6,lr} - sub sp, 0x18 - ldr r0, _08129318 @ =gUnknown_203B0E0 - ldr r5, [r0] - ldrb r0, [r5, 0x10] - cmp r0, 0x3 - beq _08129320 - ldr r3, _0812931C @ =gUnknown_845A9AC - ldrb r1, [r5, 0x12] - lsls r1, 2 - adds r2, r0, 0 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, r3 - ldr r4, [r1] - ldrb r0, [r5, 0x11] - cmp r0, 0 - beq _08129312 - adds r1, r0, 0 -_08129302: - ldrb r0, [r4] - cmp r0, 0xF9 - bne _0812930A - adds r4, 0x1 -_0812930A: - adds r4, 0x1 - subs r1, 0x1 - cmp r1, 0 - bne _08129302 -_08129312: - movs r5, 0x1 - b _08129346 - .align 2, 0 -_08129318: .4byte gUnknown_203B0E0 -_0812931C: .4byte gUnknown_845A9AC -_08129320: - ldrb r0, [r5, 0x12] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r0 - adds r1, 0xB9 - adds r1, r5, r1 - mov r0, sp - bl StringCopy - movs r1, 0 - strb r1, [r0] - movs r1, 0xFF - strb r1, [r0, 0x1] - mov r4, sp - mov r0, sp - bl StringLength_Multibyte - adds r5, r0, 0 -_08129346: - ldr r6, _081293A8 @ =gUnknown_203B0E0 - ldr r1, [r6] - ldrb r0, [r1, 0x15] - strb r0, [r1, 0x14] - cmp r4, 0 - beq _0812939E - bl sub_81294C8 - adds r2, r0, 0 - subs r5, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _0812939A - ldr r0, [r6] - ldrb r0, [r0, 0x15] - cmp r0, 0xE - bhi _0812939A - adds r3, r6, 0 -_0812936C: - ldrb r0, [r4] - cmp r0, 0xF9 - bne _08129378 - strb r0, [r2] - adds r4, 0x1 - adds r2, 0x1 -_08129378: - ldrb r0, [r4] - strb r0, [r2] - adds r4, 0x1 - adds r2, 0x1 - ldr r1, [r3] - ldrb r0, [r1, 0x15] - adds r0, 0x1 - strb r0, [r1, 0x15] - subs r5, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _0812939A - ldr r0, [r3] - ldrb r0, [r0, 0x15] - cmp r0, 0xE - bls _0812936C -_0812939A: - movs r0, 0xFF - strb r0, [r2] -_0812939E: - add sp, 0x18 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081293A8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81292D8 - - thumb_func_start sub_81293AC -sub_81293AC: @ 81293AC - push {r4,lr} - ldr r4, _081293D4 @ =gUnknown_203B0E0 - ldr r1, [r4] - ldrb r0, [r1, 0x15] - strb r0, [r1, 0x14] - ldr r0, [r4] - ldrb r0, [r0, 0x15] - cmp r0, 0 - beq _081293CE - bl sub_81294EC - movs r1, 0xFF - strb r1, [r0] - ldr r1, [r4] - ldrb r0, [r1, 0x15] - subs r0, 0x1 - strb r0, [r1, 0x15] -_081293CE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081293D4: .4byte gUnknown_203B0E0 - thumb_func_end sub_81293AC - - thumb_func_start sub_81293D8 -sub_81293D8: @ 81293D8 - push {lr} - ldr r0, _08129400 @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x15] - subs r0, 0x1 - strb r0, [r1, 0x14] - bl sub_81294EC - adds r2, r0, 0 - ldrb r0, [r2] - cmp r0, 0xF9 - beq _081293FC - ldr r1, _08129404 @ =gUnknown_845A8AC - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _081293FC - strb r0, [r2] -_081293FC: - pop {r0} - bx r0 - .align 2, 0 -_08129400: .4byte gUnknown_203B0E0 -_08129404: .4byte gUnknown_845A8AC - thumb_func_end sub_81293D8 - - thumb_func_start sub_8129408 -sub_8129408: @ 8129408 - push {lr} - ldr r0, _08129418 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x15] - cmp r0, 0 - bne _0812941C - movs r0, 0 - b _0812941E - .align 2, 0 -_08129418: .4byte gUnknown_203B0E0 -_0812941C: - movs r0, 0x1 -_0812941E: - pop {r1} - bx r1 - thumb_func_end sub_8129408 - - thumb_func_start sub_8129424 -sub_8129424: @ 8129424 - push {r4,lr} - bl sub_8129758 - adds r1, r0, 0 - ldr r4, _08129450 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r3, [r0, 0x12] - lsls r2, r3, 2 - adds r2, r3 - lsls r2, 2 - adds r2, r3 - adds r2, 0xB9 - adds r0, r2 - bl StringCopy - ldr r1, [r4] - movs r0, 0x1 - strb r0, [r1, 0x18] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129450: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129424 - - thumb_func_start sub_8129454 -sub_8129454: @ 8129454 - ldr r1, _0812946C @ =gUnknown_203B0E0 - ldr r2, [r1] - movs r0, 0xFF - strb r0, [r2, 0x1A] - ldr r2, [r1] - movs r3, 0 - movs r0, 0xF - strb r0, [r2, 0x14] - ldr r0, [r1] - strb r3, [r0, 0x15] - bx lr - .align 2, 0 -_0812946C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129454 - - thumb_func_start sub_8129470 -sub_8129470: @ 8129470 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _081294A4 @ =gSaveBlock1Ptr - mov r8, r0 - ldr r7, _081294A8 @ =gUnknown_203B0E0 - movs r6, 0xB9 - ldr r5, _081294AC @ =0x00003ad4 - movs r4, 0x9 -_08129482: - mov r1, r8 - ldr r0, [r1] - adds r0, r5 - ldr r1, [r7] - adds r1, r6 - bl StringCopy - adds r6, 0x15 - adds r5, 0x15 - subs r4, 0x1 - cmp r4, 0 - bge _08129482 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081294A4: .4byte gSaveBlock1Ptr -_081294A8: .4byte gUnknown_203B0E0 -_081294AC: .4byte 0x00003ad4 - thumb_func_end sub_8129470 - - thumb_func_start sub_81294B0 -sub_81294B0: @ 81294B0 - ldr r2, _081294C4 @ =gUnknown_203B0E0 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r0 - adds r1, 0xB9 - ldr r0, [r2] - adds r0, r1 - bx lr - .align 2, 0 -_081294C4: .4byte gUnknown_203B0E0 - thumb_func_end sub_81294B0 - - thumb_func_start sub_81294C8 -sub_81294C8: @ 81294C8 - push {lr} - ldr r0, _081294E8 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x1A - ldrb r0, [r0, 0x1A] - cmp r0, 0xFF - beq _081294E0 -_081294D8: - adds r1, 0x1 - ldrb r0, [r1] - cmp r0, 0xFF - bne _081294D8 -_081294E0: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_081294E8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81294C8 - - thumb_func_start sub_81294EC -sub_81294EC: @ 81294EC - push {lr} - ldr r0, _08129518 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r2, r0, 0 - adds r2, 0x1A - adds r1, r2, 0 - ldrb r0, [r0, 0x1A] - cmp r0, 0xFF - beq _08129510 -_081294FE: - adds r2, r1, 0 - ldrb r0, [r2] - cmp r0, 0xF9 - bne _08129508 - adds r1, r2, 0x1 -_08129508: - adds r1, 0x1 - ldrb r0, [r1] - cmp r0, 0xFF - bne _081294FE -_08129510: - adds r0, r2, 0 - pop {r1} - bx r1 - .align 2, 0 -_08129518: .4byte gUnknown_203B0E0 - thumb_func_end sub_81294EC - - thumb_func_start sub_812951C -sub_812951C: @ 812951C - push {r4,lr} - ldr r4, _0812955C @ =gUnknown_203B0E0 - ldr r0, [r4] - adds r0, 0x1A - bl StringLength_Multibyte - adds r2, r0, 0 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x1A - movs r4, 0 - cmp r2, 0xA - bls _08129550 - subs r2, 0xA - movs r3, 0 - cmp r4, r2 - bcs _08129550 -_0812953E: - ldrb r0, [r1] - cmp r0, 0xF9 - bne _08129546 - adds r1, 0x1 -_08129546: - adds r1, 0x1 - adds r4, 0x1 - adds r3, 0x1 - cmp r3, r2 - bcc _0812953E -_08129550: - lsls r0, r4, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0812955C: .4byte gUnknown_203B0E0 - thumb_func_end sub_812951C - - thumb_func_start sub_8129560 -sub_8129560: @ 8129560 - movs r1, 0 - strb r1, [r0] - bx lr - thumb_func_end sub_8129560 - thumb_func_start sub_8129568 sub_8129568: @ 8129568 push {r4,lr} @@ -3013,7 +2526,7 @@ _0812A84C: movs r7, 0 movs r6, 0 lsls r0, r2, 2 - ldr r1, _0812A89C @ =gUnknown_845A9AC + ldr r1, _0812A89C @ =sUnionRoomKeyboardText adds r0, r2 lsls r0, 3 adds r4, r0, r1 @@ -3051,7 +2564,7 @@ _0812A866: ble _0812A85E b _0812A96C .align 2, 0 -_0812A89C: .4byte gUnknown_845A9AC +_0812A89C: .4byte sUnionRoomKeyboardText _0812A8A0: movs r1, 0x4 str r1, [sp, 0x40] diff --git a/data/union_room_chat.s b/data/union_room_chat.s index 9c23697ee..0a51e90a4 100644 --- a/data/union_room_chat.s +++ b/data/union_room_chat.s @@ -6,75 +6,6 @@ .section .rodata .align 2 -gUnknown_845A8A8:: @ 845A8A8 - .byte 0x09, 0x09, 0x09, 0x09 - -gUnknown_845A8AC:: @ 845A8AC - .byte 0x00, 0x16, 0x17, 0x68, 0x19, 0x1a, 0x1b, 0x1c - .byte 0x1d, 0x1e, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24 - .byte 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02 - .byte 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 - .byte 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12 - .byte 0x13, 0x14, 0x2a, 0x2b, 0x2c, 0x2d, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00 - .byte 0x00, 0x00, 0x6f, 0x5b, 0x5c, 0x5d, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7 - .byte 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf - .byte 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7 - .byte 0xb8, 0xb9, 0xba, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9 - .byte 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1 - .byte 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9 - .byte 0xea, 0xeb, 0xec, 0xed, 0xee, 0xbb, 0xbc, 0xbd - .byte 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5 - .byte 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd - .byte 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xef - .byte 0xf0, 0xf4, 0xf5, 0xf6, 0xf1, 0xf2, 0xf3, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - -gUnknown_845A9AC:: @ 845A9AC - .4byte gText_UnionRoomChatKeyboard_ABCDE - .4byte gText_UnionRoomChatKeyboard_FGHIJ - .4byte gText_UnionRoomChatKeyboard_KLMNO - .4byte gText_UnionRoomChatKeyboard_PQRST - .4byte gText_UnionRoomChatKeyboard_UVWXY - .4byte gText_UnionRoomChatKeyboard_Z - .4byte gText_UnionRoomChatKeyboard_01234Upper - .4byte gText_UnionRoomChatKeyboard_56789Upper - .4byte gText_UnionRoomChatKeyboard_PunctuationUpper - .4byte gText_UnionRoomChatKeyboard_SymbolsUpper - .4byte gText_UnionRoomChatKeyboard_abcde - .4byte gText_UnionRoomChatKeyboard_fghij - .4byte gText_UnionRoomChatKeyboard_klmno - .4byte gText_UnionRoomChatKeyboard_pqrst - .4byte gText_UnionRoomChatKeyboard_uvwxy - .4byte gText_UnionRoomChatKeyboard_z - .4byte gText_UnionRoomChatKeyboard_01234Lower - .4byte gText_UnionRoomChatKeyboard_56789Lower - .4byte gText_UnionRoomChatKeyboard_PunctuationLower - .4byte gText_UnionRoomChatKeyboard_SymbolsLower - .4byte gText_UnionRoomChatKeyboard_Emoji1 - .4byte gText_UnionRoomChatKeyboard_Emoji2 - .4byte gText_UnionRoomChatKeyboard_Emoji3 - .4byte gText_UnionRoomChatKeyboard_Emoji4 - .4byte gText_UnionRoomChatKeyboard_Emoji5 - .4byte gText_UnionRoomChatKeyboard_Emoji6 - .4byte gText_UnionRoomChatKeyboard_Emoji7 - .4byte gText_UnionRoomChatKeyboard_Emoji8 - .4byte gText_UnionRoomChatKeyboard_Emoji9 - .4byte gText_UnionRoomChatKeyboard_Emoji10 - gUnknown_845AA24:: @ 845AA24 .incbin "graphics/union_room_chat/unk_845AA24.gbapal" diff --git a/include/text.h b/include/text.h index cd059e0e5..ff8b033e9 100644 --- a/include/text.h +++ b/include/text.h @@ -5,10 +5,24 @@ #define CHAR_SPACE 0x00 #define CHAR_0 0xA1 +#define CHAR_1 0xA2 +#define CHAR_2 0xA3 +#define CHAR_3 0xA4 +#define CHAR_4 0xA5 +#define CHAR_5 0xA6 +#define CHAR_6 0xA7 +#define CHAR_7 0xA8 +#define CHAR_8 0xA9 +#define CHAR_9 0xAA +#define CHAR_EXCL_MARK 0xAB #define CHAR_QUESTION_MARK 0xAC #define CHAR_PERIOD 0xAD #define CHAR_HYPHEN 0xAE #define CHAR_ELLIPSIS 0xB0 +#define CHAR_DBL_QUOT_LEFT 0xB1 +#define CHAR_DBL_QUOT_RIGHT 0xB2 +#define CHAR_SGL_QUOT_LEFT 0xB3 +#define CHAR_SGL_QUOT_RIGHT 0xB4 #define CHAR_MALE 0xB5 #define CHAR_FEMALE 0xB6 #define CHAR_CURRENCY 0xB7 diff --git a/src/union_room_chat.c b/src/union_room_chat.c index cd285267a..c171731c2 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -11,6 +11,7 @@ #include "save.h" #include "scanline_effect.h" #include "task.h" +#include "data_8479668.h" #include "constants/songs.h" enum @@ -76,12 +77,15 @@ bool32 sub_8129408(void); void sub_8129424(void); void sub_8129454(void); void sub_8129470(void); +u8 *sub_81294C8(void); +u8 *sub_81294EC(void); void sub_8129560(u8 *ptr); void sub_8129568(u8 *ptr); void sub_8129590(u8 *ptr); void sub_81295C0(u8 *ptr); void sub_81295EC(u8 *ptr); void sub_8129614(u8 *ptr); +u8 *sub_8129758(void); void sub_81298F8(u8 taskId); void sub_8129B14(void); bool32 sub_8129B78(void); @@ -104,6 +108,88 @@ static void (*const gUnknown_845A880[])(void) = { sub_8128FB8 }; +static const u8 sKeyboardPageMaxRow[] = +{ + [UNION_ROOM_KB_PAGE_UPPER] = 9, + [UNION_ROOM_KB_PAGE_LOWER] = 9, + [UNION_ROOM_KB_PAGE_EMOJI] = 9, + 9 +}; + +const u8 gUnknown_845A8AC[] = { + CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, + 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, + CHAR_SPACE, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, CHAR_SPACE, + 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x35, 0x36, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x53, 0x54, 0x55, 0x56, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, 0x6F, 0x5B, 0x5C, 0x5D, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + 0x03, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x5A, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x84, 0x85, 0x86, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + 0xA0, CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, + CHAR_7, CHAR_8, CHAR_9, CHAR_EXCL_MARK, CHAR_QUESTION_MARK, CHAR_PERIOD, CHAR_HYPHEN, 0xAF, + CHAR_ELLIPSIS, CHAR_DBL_QUOT_LEFT, CHAR_DBL_QUOT_RIGHT, CHAR_SGL_QUOT_LEFT, CHAR_SGL_QUOT_RIGHT, CHAR_MALE, CHAR_FEMALE, CHAR_CURRENCY, + CHAR_COMMA, CHAR_MULT_SIGN, CHAR_SLASH, CHAR_a, CHAR_b, CHAR_c, CHAR_d, CHAR_e, + CHAR_f, CHAR_g, CHAR_h, CHAR_i, CHAR_j, CHAR_k, CHAR_l, CHAR_m, + CHAR_n, CHAR_o, CHAR_p, CHAR_q, CHAR_r, CHAR_s, CHAR_t, CHAR_u, + CHAR_v, CHAR_w, CHAR_x, CHAR_y, CHAR_z, CHAR_A, CHAR_B, CHAR_C, + CHAR_D, CHAR_E, CHAR_F, CHAR_G, CHAR_H, CHAR_I, CHAR_J, CHAR_K, + CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, + CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y, CHAR_Z, 0xEF, + CHAR_COLON, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE +}; + +const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { + [UNION_ROOM_KB_PAGE_UPPER] = { + gText_UnionRoomChatKeyboard_ABCDE, + gText_UnionRoomChatKeyboard_FGHIJ, + gText_UnionRoomChatKeyboard_KLMNO, + gText_UnionRoomChatKeyboard_PQRST, + gText_UnionRoomChatKeyboard_UVWXY, + gText_UnionRoomChatKeyboard_Z, + gText_UnionRoomChatKeyboard_01234Upper, + gText_UnionRoomChatKeyboard_56789Upper, + gText_UnionRoomChatKeyboard_PunctuationUpper, + gText_UnionRoomChatKeyboard_SymbolsUpper + }, + [UNION_ROOM_KB_PAGE_LOWER] = { + gText_UnionRoomChatKeyboard_abcde, + gText_UnionRoomChatKeyboard_fghij, + gText_UnionRoomChatKeyboard_klmno, + gText_UnionRoomChatKeyboard_pqrst, + gText_UnionRoomChatKeyboard_uvwxy, + gText_UnionRoomChatKeyboard_z, + gText_UnionRoomChatKeyboard_01234Lower, + gText_UnionRoomChatKeyboard_56789Lower, + gText_UnionRoomChatKeyboard_PunctuationLower, + gText_UnionRoomChatKeyboard_SymbolsLower + }, + [UNION_ROOM_KB_PAGE_EMOJI] = { + gText_UnionRoomChatKeyboard_Emoji1, + gText_UnionRoomChatKeyboard_Emoji2, + gText_UnionRoomChatKeyboard_Emoji3, + gText_UnionRoomChatKeyboard_Emoji4, + gText_UnionRoomChatKeyboard_Emoji5, + gText_UnionRoomChatKeyboard_Emoji6, + gText_UnionRoomChatKeyboard_Emoji7, + gText_UnionRoomChatKeyboard_Emoji8, + gText_UnionRoomChatKeyboard_Emoji9, + gText_UnionRoomChatKeyboard_Emoji10 + } +}; + void sub_8128420(void) { gUnknown_203B0E0 = Alloc(sizeof(struct UnionRoomChat)); @@ -801,3 +887,228 @@ void sub_8128FB8(void) break; } } + +void sub_8129218(u16 arg0) +{ + gUnknown_203B0E0->unk4 = arg0; + gUnknown_203B0E0->unk6 = 0; +} + +bool32 sub_8129228(void) +{ + if (!(gMain.newAndRepeatedKeys & DPAD_UP)) + { + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_203B0E0->currentRow < sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage]) + gUnknown_203B0E0->currentRow++; + else + gUnknown_203B0E0->currentRow = 0; + + return TRUE; + } + + if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + { + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + if (gUnknown_203B0E0->unk11) + gUnknown_203B0E0->unk11--; + else + gUnknown_203B0E0->unk11 = 4; + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + if (gUnknown_203B0E0->unk11 > 3) + gUnknown_203B0E0->unk11 = 0; + else + gUnknown_203B0E0->unk11++; + } + else + { + return FALSE; + } + + return TRUE; + } + + return FALSE; + } + else + { + if (gUnknown_203B0E0->currentRow) + gUnknown_203B0E0->currentRow--; + else + gUnknown_203B0E0->currentRow = sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage]; + + return TRUE; + } +} + +void sub_81292D8(void) +{ + int i; + const u8 *charsStr; + int strLength; + u8 *str; + u8 buffer[21]; + + if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + { + charsStr = sUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow]; + for (i = 0; i < gUnknown_203B0E0->unk11; i++) + { + if (*charsStr == CHAR_EXTRA_EMOJI) + charsStr++; + charsStr++; + } + + strLength = 1; + } + else + { + u8 *tempStr = StringCopy(buffer, gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow]); + tempStr[0] = CHAR_SPACE; + tempStr[1] = EOS; + charsStr = buffer; + strLength = StringLength_Multibyte(buffer); + } + + gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; + if (!charsStr) + return; + + str = sub_81294C8(); + while (--strLength != -1 && gUnknown_203B0E0->unk15 < 15) + { + if (*charsStr == CHAR_EXTRA_EMOJI) + { + *str = *charsStr; + charsStr++; + str++; + } + + *str = *charsStr; + charsStr++; + str++; + + gUnknown_203B0E0->unk15++; + } + + *str = EOS; +} + +void sub_81293AC(void) +{ + gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; + if (gUnknown_203B0E0->unk15) + { + u8 *str = sub_81294EC(); + *str = EOS; + gUnknown_203B0E0->unk15--; + } +} + +void sub_81293D8(void) +{ + u8 *str; + u8 character; + + gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15 - 1; + str = sub_81294EC(); + if (*str != CHAR_EXTRA_EMOJI) + { + character = gUnknown_845A8AC[*str]; + if (character) + *str = character; + } +} + +bool32 sub_8129408(void) +{ + if (gUnknown_203B0E0->unk15) + return TRUE; + else + return FALSE; +} + +void sub_8129424(void) +{ + u8 *src = sub_8129758(); + StringCopy(gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow], src); + gUnknown_203B0E0->unk18 = 1; +} + +void sub_8129454(void) +{ + gUnknown_203B0E0->unk1A[0] = EOS; + gUnknown_203B0E0->unk14 = 15; + gUnknown_203B0E0->unk15 = 0; +} + +void sub_8129470(void) +{ + int i; + for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) + StringCopy(gSaveBlock1Ptr->unk3AD4[i], gUnknown_203B0E0->unkB9[i]); +} + +u8 *sub_81294B0(int arg0) +{ + return gUnknown_203B0E0->unkB9[arg0]; +} + +// GetEndOfUnk1A +u8 *sub_81294C8(void) +{ + u8 *str = gUnknown_203B0E0->unk1A; + while (*str != EOS) + str++; + + return str; +} + +// GetPtrToLastCharOfUnk1A +u8 *sub_81294EC(void) +{ + u8 *str = gUnknown_203B0E0->unk1A; + u8 *str2 = str; + while (*str != EOS) + { + str2 = str; + if (*str == CHAR_EXTRA_EMOJI) + str++; + str++; + } + + return str2; +} + +u16 sub_812951C(void) +{ + u8 *str; + u32 i, numChars, strLength; + + strLength = StringLength_Multibyte(gUnknown_203B0E0->unk1A); + str = gUnknown_203B0E0->unk1A; + numChars = 0; + if (strLength > 10) + { + strLength -= 10; + for (i = 0; i < strLength; i++) + { + if (*str == CHAR_EXTRA_EMOJI) + str++; + + str++; + numChars++; + } + } + + return numChars; +} + +void sub_8129560(u8 *arg0) +{ + arg0[0] = CHAR_SPACE; +} From 70e7f464cafb9173aef2eb0a8a7b47bc90238f09 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Jan 2020 21:57:31 -0500 Subject: [PATCH 04/11] PLAYER_NAME_LENGTH to 7 --- include/global.h | 14 +++++++------- include/trainer_card.h | 2 +- include/union_room.h | 2 +- src/daycare.c | 2 +- src/link_rfu_2.c | 2 +- src/link_rfu_3.c | 4 ++-- src/mail_data.c | 4 ++-- src/new_game.c | 2 +- src/oak_speech.c | 4 ++-- src/pokemon.c | 4 ++-- src/quest_log.c | 44 +++++++++++++++++++++--------------------- src/union_room.c | 2 +- 12 files changed, 43 insertions(+), 43 deletions(-) diff --git a/include/global.h b/include/global.h index 686ecb11c..3da77e307 100644 --- a/include/global.h +++ b/include/global.h @@ -182,13 +182,13 @@ struct BerryCrush u32 unk; }; -#define PLAYER_NAME_LENGTH 8 +#define PLAYER_NAME_LENGTH 7 #define LINK_B_RECORDS_COUNT 5 struct LinkBattleRecord { - u8 name[PLAYER_NAME_LENGTH]; + u8 name[PLAYER_NAME_LENGTH + 1]; u16 trainerId; u16 wins; u16 losses; @@ -261,7 +261,7 @@ struct BattleTowerData // Leftover from R/S struct SaveBlock2 { - /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH]; + /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x008*/ u8 playerGender; // MALE, FEMALE /*0x009*/ u8 specialSaveWarpFlags; /*0x00A*/ u8 playerTrainerId[4]; @@ -312,7 +312,7 @@ struct SecretBaseRecord /*0x1A9D*/ u8 gender:1; /*0x1A9D*/ u8 sbr_field_1_5:1; /*0x1A9D*/ u8 sbr_field_1_6:2; - /*0x1A9E*/ u8 trainerName[7]; // TODO: Change PLAYER_NAME_LENGTH to 7 + /*0x1A9E*/ u8 trainerName[7]; // TODO: Change PLAYER_NAME_LENGTH + 1 to 7 /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class /*0x1AA9*/ u8 language; /*0x1AAA*/ u16 sbr_field_e; @@ -404,7 +404,7 @@ struct UnkMauvilleOldManStruct u8 unk_2D95; /*0x2D96*/ u16 mauvilleOldMan_ecArray[6]; /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6]; - /*0x2DAE*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x2DAE*/ u8 playerName[PLAYER_NAME_LENGTH + 1 + 1]; /*0x2DB6*/ u8 filler_2DB6[0x3]; /*0x2DB9*/ u8 playerTrainerId[4]; u8 unk_2DBD; @@ -715,7 +715,7 @@ struct TrainerRematchState struct TrainerNameRecord { u32 trainerId; - u8 trainerName[PLAYER_NAME_LENGTH]; + u8 trainerName[PLAYER_NAME_LENGTH + 1]; }; #define UNION_ROOM_KB_ROW_COUNT 10 @@ -772,7 +772,7 @@ struct SaveBlock1 /*0x361C*/ struct RamScript ramScript; /*0x3A08*/ u8 filler3A08[16]; /*0x3A18*/ u8 seen2[DEX_FLAGS_NO]; - /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; + /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1]; /*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS]; /*0x3A94*/ u8 filler3A94[0x40]; /*0x3AD4*/ u8 unk3AD4[UNION_ROOM_KB_ROW_COUNT][21]; diff --git a/include/trainer_card.h b/include/trainer_card.h index 06844dc2e..ed3e803d5 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -24,7 +24,7 @@ struct TrainerCard /*0x20*/ u16 pokemonTrades; /*0x24*/ u32 money; /*0x28*/ u16 var_28[4]; - /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH]; + /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x38*/ u8 version; /*0x3A*/ u16 var_3A; /*0x3C*/ u32 berryCrushPoints; diff --git a/include/union_room.h b/include/union_room.h index 3cb8eb84a..7e48b3e6e 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -7,7 +7,7 @@ struct UnkStruct_Shared { struct GFtgtGname gname; - u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH]; + u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1]; }; struct UnkStruct_x1C diff --git a/src/daycare.c b/src/daycare.c index a377e97f5..856a5fbc0 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -638,7 +638,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH/* + 1*/; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1/* + 1*/; i++) mail->OT_name[i] = 0; for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) mail->monName[i] = 0; diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 17f604ee8..4d1917789 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -30,7 +30,7 @@ static u16 gUnknown_3002008[7]; struct GFtgtGname gHostRFUtgtGnameBuffer; struct UnkRfuStruct_2 Rfu; -u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH]; +u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1]; static void sub_80F8AA4(void); static void sub_80F8AEC(void); diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 31ea0830b..69b6603a8 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -848,7 +848,7 @@ static void ZeroName(u8 *name) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { *name++ = 0; } @@ -858,7 +858,7 @@ static bool32 NameIsEmpty(const u8 *name) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { if (*name++ != 0) { diff --git a/src/mail_data.c b/src/mail_data.c index d4fa649e1..43ca1d0e6 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -20,7 +20,7 @@ void ClearMailStruct(struct MailStruct *mail) for (i = 0; i < MAIL_WORDS_COUNT; i++) mail->words[i] = 0xFFFF; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) mail->playerName[i] = EOS; for (i = 0; i < 4; i++) mail->trainerId[i] = 0; @@ -52,7 +52,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) { for (i = 0; i < MAIL_WORDS_COUNT; i++) gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF; - for (i = 0; i < PLAYER_NAME_LENGTH - 1 && gSaveBlock2Ptr->playerName[i] != EOS; i++) + for (i = 0; i < PLAYER_NAME_LENGTH && gSaveBlock2Ptr->playerName[i] != EOS; i++) gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i]; for (; i <= 5; i++) gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE; diff --git a/src/new_game.c b/src/new_game.c index 381ba28c8..7428563de 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -108,7 +108,7 @@ void ResetMenuAndMonGlobals(void) void NewGameInitData(void) { - u8 rivalName[PLAYER_NAME_LENGTH]; + u8 rivalName[PLAYER_NAME_LENGTH + 1]; StringCopy(rivalName, gSaveBlock1Ptr->rivalName); gDifferentSaveFile = TRUE; diff --git a/src/oak_speech.c b/src/oak_speech.c index 0ad5d6a6f..6887ff85a 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -1902,8 +1902,8 @@ static void GetDefaultName(u8 arg0, u8 namePick) src = sRivalNameChoices[namePick]; dest = gSaveBlock1Ptr->rivalName; } - for (i = 0; i < PLAYER_NAME_LENGTH - 1 && src[i] != EOS; i++) + for (i = 0; i < PLAYER_NAME_LENGTH && src[i] != EOS; i++) dest[i] = src[i]; - for (; i < PLAYER_NAME_LENGTH; i++) + for (; i < PLAYER_NAME_LENGTH + 1; i++) dest[i] = EOS; } diff --git a/src/pokemon.c b/src/pokemon.c index d1305861a..130709598 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2991,7 +2991,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) { retVal = 0; - // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + 1 while (retVal < 7) { data[retVal] = boxMon->otName[retVal]; @@ -5769,7 +5769,7 @@ s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor) bool8 IsTradedMon(struct Pokemon *mon) { - u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH to 7 + u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH + 1 to 7 u32 otId; GetMonData(mon, MON_DATA_OT_NAME, otName); otId = GetMonData(mon, MON_DATA_OT_ID, 0); diff --git a/src/quest_log.c b/src/quest_log.c index 0cda4eb77..a02aea302 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -2411,8 +2411,8 @@ static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 w else { str = gStringVar1; - StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH - 1); - str[PLAYER_NAME_LENGTH - 1] = EOS; + StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH); + str[PLAYER_NAME_LENGTH] = EOS; if ( str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) { @@ -3401,8 +3401,8 @@ static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0) { const u16 *r6 = a0 + 4; - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received @@ -3435,7 +3435,7 @@ static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData) a0[0] = QL_EVENT_LINK_BATTLED_SINGLE; a0[1] = sQuestLogIdx; *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); a0 += 6; return a0; } @@ -3444,8 +3444,8 @@ static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0) { DynamicPlaceholderTextUtil_Reset(); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); @@ -3459,7 +3459,7 @@ static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData) a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE; a0[1] = sQuestLogIdx; *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); a0 += 6; return a0; } @@ -3468,8 +3468,8 @@ static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0) { DynamicPlaceholderTextUtil_Reset(); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); @@ -3483,9 +3483,9 @@ static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData) a0[0] = QL_EVENT_LINK_BATTLED_MULTI; a0[1] = sQuestLogIdx; *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); - memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH - 1); - memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); + memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH); + memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH); a0 += 13; return a0; } @@ -3494,9 +3494,9 @@ static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0) { DynamicPlaceholderTextUtil_Reset(); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memset(gStringVar2, EOS, PLAYER_NAME_LENGTH); - memset(gStringVar3, EOS, PLAYER_NAME_LENGTH); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1); + memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1); StringCopy7(gStringVar1, (const u8 *)a0 + 5); StringCopy7(gStringVar2, (const u8 *)a0 + 12); StringCopy7(gStringVar3, (const u8 *)a0 + 19); @@ -3548,7 +3548,7 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData a0[1] = sQuestLogIdx; a0[2] = eventData[0]; a0[3] = eventData[1]; - memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH - 1); + memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH); r4 += 8; return (u16 *)r4; } @@ -3556,8 +3556,8 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0) { const u8 *r6 = (const u8 *)(a0 + 4); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); @@ -3571,15 +3571,15 @@ static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventDat a0[0] = QL_EVENT_LINK_BATTLED_UNION; a0[1] = sQuestLogIdx; *(u8 *)&a0[2] = *(const u8 *)&eventData[0]; - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); a0 += 6; return a0; } static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0) { - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]); StringExpandPlaceholders(gStringVar4, QuestLog_Text_BattledTrainerEndedInOutcome); diff --git a/src/union_room.c b/src/union_room.c index 4e3428cc6..6be88e2dd 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3385,7 +3385,7 @@ static void sub_81199FC(u8 taskId) case 2: if (sUnionRoomPlayerName[0] == EOS) { - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { if (structPtr->field_0->arr[i].field_1A_0 == 1) { From c99246fccfc6f04f015d0b5b2850fa7d01914961 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 08:52:18 -0500 Subject: [PATCH 05/11] through sub_81298F8 --- asm/union_room_chat.s | 772 +----------------------------------------- data/strings.s | 24 +- include/link_rfu.h | 2 + include/strings.h | 14 + src/union_room_chat.c | 309 ++++++++++++++++- 5 files changed, 342 insertions(+), 779 deletions(-) diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 24e341f0d..422a8786b 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5,766 +5,6 @@ .text - thumb_func_start sub_8129568 -sub_8129568: @ 8129568 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x2 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _08129588 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _0812958C @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129588: .4byte gSaveBlock2Ptr -_0812958C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129568 - - thumb_func_start sub_8129590 -sub_8129590: @ 8129590 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _081295B8 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - adds r4, 0x9 - ldr r0, _081295BC @ =gUnknown_203B0E0 - ldr r1, [r0] - adds r1, 0x1A - adds r0, r4, 0 - bl StringCopy - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081295B8: .4byte gSaveBlock2Ptr -_081295BC: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129590 - - thumb_func_start sub_81295C0 -sub_81295C0: @ 81295C0 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x3 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _081295E4 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _081295E8 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - bl sub_80FB9D0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081295E4: .4byte gSaveBlock2Ptr -_081295E8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81295C0 - - thumb_func_start sub_81295EC -sub_81295EC: @ 81295EC - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x4 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _0812960C @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _08129610 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812960C: .4byte gSaveBlock2Ptr -_08129610: .4byte gUnknown_203B0E0 - thumb_func_end sub_81295EC - - thumb_func_start sub_8129614 -sub_8129614: @ 8129614 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x5 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _08129634 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _08129638 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129634: .4byte gSaveBlock2Ptr -_08129638: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129614 - - thumb_func_start sub_812963C -sub_812963C: @ 812963C - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldrb r0, [r5] - adds r1, r0, 0 - adds r4, r5, 0x1 - adds r5, r4, 0 - adds r5, 0x8 - cmp r0, 0x2 - beq _08129664 - cmp r0, 0x2 - bgt _0812965A - cmp r0, 0x1 - beq _08129688 - b _081296EC -_0812965A: - cmp r1, 0x3 - beq _081296BE - cmp r1, 0x5 - beq _081296B2 - b _081296EC -_08129664: - ldr r0, _08129680 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - ldrb r1, [r4, 0x8] - cmp r0, r1 - beq _081296EC - bl DynamicPlaceholderTextUtil_Reset - movs r0, 0 - adds r1, r4, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r1, _08129684 @ =gUnknown_841B3AA - b _081296D8 - .align 2, 0 -_08129680: .4byte gUnknown_203B0E0 -_08129684: .4byte gUnknown_841B3AA -_08129688: - adds r0, r6, 0 - adds r1, r4, 0 - bl StringCopy - movs r1, 0xFC - strb r1, [r0] - adds r0, 0x1 - movs r1, 0x13 - strb r1, [r0] - adds r0, 0x1 - movs r1, 0x2A - strb r1, [r0] - adds r0, 0x1 - movs r1, 0xF0 - strb r1, [r0] - adds r0, 0x1 - adds r1, r5, 0 - bl StringCopy - movs r0, 0x1 - b _081296EE -_081296B2: - ldr r0, _081296E4 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x79 - adds r1, r4, 0 - bl StringCopy -_081296BE: - ldr r0, _081296E4 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - ldrb r5, [r5] - cmp r0, r5 - beq _081296EC - bl DynamicPlaceholderTextUtil_Reset - movs r0, 0 - adds r1, r4, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r1, _081296E8 @ =gUnknown_841B3BE -_081296D8: - adds r0, r6, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r0, 0x1 - b _081296EE - .align 2, 0 -_081296E4: .4byte gUnknown_203B0E0 -_081296E8: .4byte gUnknown_841B3BE -_081296EC: - movs r0, 0 -_081296EE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_812963C - - thumb_func_start sub_81296F4 -sub_81296F4: @ 81296F4 - ldr r0, _081296FC @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x10] - bx lr - .align 2, 0 -_081296FC: .4byte gUnknown_203B0E0 - thumb_func_end sub_81296F4 - - thumb_func_start sub_8129700 -sub_8129700: @ 8129700 - ldr r2, _08129710 @ =gUnknown_203B0E0 - ldr r3, [r2] - ldrb r2, [r3, 0x11] - strb r2, [r0] - ldrb r0, [r3, 0x12] - strb r0, [r1] - bx lr - .align 2, 0 -_08129710: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129700 - - thumb_func_start sub_8129714 -sub_8129714: @ 8129714 - ldr r0, _0812971C @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x1A - bx lr - .align 2, 0 -_0812971C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129714 - - thumb_func_start sub_8129720 -sub_8129720: @ 8129720 - push {lr} - bl sub_8129714 - bl StringLength_Multibyte - pop {r1} - bx r1 - thumb_func_end sub_8129720 - - thumb_func_start sub_8129730 -sub_8129730: @ 8129730 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08129748 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r3, [r0, 0x15] - ldrb r2, [r0, 0x14] - subs r0, r3, r2 - cmp r0, 0 - bge _0812974C - negs r0, r0 - str r3, [r4] - b _0812974E - .align 2, 0 -_08129748: .4byte gUnknown_203B0E0 -_0812974C: - str r2, [r4] -_0812974E: - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8129730 - - thumb_func_start sub_8129758 -sub_8129758: @ 8129758 - push {lr} - bl sub_812951C - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _08129784 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x1A - cmp r2, 0 - beq _0812977E -_0812976E: - ldrb r0, [r1] - cmp r0, 0xF9 - bne _08129776 - adds r1, 0x1 -_08129776: - adds r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bne _0812976E -_0812977E: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_08129784: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129758 - - thumb_func_start sub_8129788 -sub_8129788: @ 8129788 - push {r4,lr} - bl sub_812951C - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _081297C0 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x1A - movs r2, 0 - movs r3, 0 - cmp r2, r4 - bcs _081297B8 -_081297A2: - ldrb r0, [r1] - cmp r0, 0xF9 - bne _081297AA - adds r1, 0x1 -_081297AA: - adds r1, 0x1 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - adds r3, 0x1 - cmp r3, r4 - bcc _081297A2 -_081297B8: - adds r0, r2, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081297C0: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129788 - - thumb_func_start sub_81297C4 -sub_81297C4: @ 81297C4 - ldr r0, _081297CC @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x39 - bx lr - .align 2, 0 -_081297CC: .4byte gUnknown_203B0E0 - thumb_func_end sub_81297C4 - - thumb_func_start sub_81297D0 -sub_81297D0: @ 81297D0 - ldr r0, _081297D8 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x16] - bx lr - .align 2, 0 -_081297D8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81297D0 - - thumb_func_start sub_81297DC -sub_81297DC: @ 81297DC - ldr r0, _081297E4 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x15] - bx lr - .align 2, 0 -_081297E4: .4byte gUnknown_203B0E0 - thumb_func_end sub_81297DC - - thumb_func_start sub_81297E8 -sub_81297E8: @ 81297E8 - push {lr} - bl sub_81294EC - ldrb r1, [r0] - cmp r1, 0xFF - bhi _08129802 - ldr r0, _08129808 @ =gUnknown_845A8AC - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, r1 - beq _08129802 - cmp r0, 0 - bne _0812980C -_08129802: - movs r0, 0x3 - b _0812980E - .align 2, 0 -_08129808: .4byte gUnknown_845A8AC -_0812980C: - movs r0, 0 -_0812980E: - pop {r1} - bx r1 - thumb_func_end sub_81297E8 - - thumb_func_start sub_8129814 -sub_8129814: @ 8129814 - ldr r0, _0812981C @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x79 - bx lr - .align 2, 0 -_0812981C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129814 - - thumb_func_start copy_strings_to_sav1 -copy_strings_to_sav1: @ 8129820 - push {r4,lr} - ldr r4, _081298A4 @ =gSaveBlock1Ptr - ldr r0, [r4] - ldr r1, _081298A8 @ =0x00003ad4 - adds r0, r1 - ldr r1, _081298AC @ =gUnknown_841B510 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298B0 @ =0x00003ae9 - adds r0, r1 - ldr r1, _081298B4 @ =gUnknown_841B516 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298B8 @ =0x00003afe - adds r0, r1 - ldr r1, _081298BC @ =gUnknown_841B51E - bl StringCopy - ldr r0, [r4] - ldr r1, _081298C0 @ =0x00003b13 - adds r0, r1 - ldr r1, _081298C4 @ =gUnknown_841B524 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298C8 @ =0x00003b28 - adds r0, r1 - ldr r1, _081298CC @ =gUnknown_841B52B - bl StringCopy - ldr r0, [r4] - ldr r1, _081298D0 @ =0x00003b3d - adds r0, r1 - ldr r1, _081298D4 @ =gUnknown_841B531 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298D8 @ =0x00003b52 - adds r0, r1 - ldr r1, _081298DC @ =gUnknown_841B535 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298E0 @ =0x00003b67 - adds r0, r1 - ldr r1, _081298E4 @ =gUnknown_841B53B - bl StringCopy - ldr r0, [r4] - ldr r1, _081298E8 @ =0x00003b7c - adds r0, r1 - ldr r1, _081298EC @ =gUnknown_841B541 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298F0 @ =0x00003b91 - adds r0, r1 - ldr r1, _081298F4 @ =gUnknown_841B54B - bl StringCopy - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081298A4: .4byte gSaveBlock1Ptr -_081298A8: .4byte 0x00003ad4 -_081298AC: .4byte gUnknown_841B510 -_081298B0: .4byte 0x00003ae9 -_081298B4: .4byte gUnknown_841B516 -_081298B8: .4byte 0x00003afe -_081298BC: .4byte gUnknown_841B51E -_081298C0: .4byte 0x00003b13 -_081298C4: .4byte gUnknown_841B524 -_081298C8: .4byte 0x00003b28 -_081298CC: .4byte gUnknown_841B52B -_081298D0: .4byte 0x00003b3d -_081298D4: .4byte gUnknown_841B531 -_081298D8: .4byte 0x00003b52 -_081298DC: .4byte gUnknown_841B535 -_081298E0: .4byte 0x00003b67 -_081298E4: .4byte gUnknown_841B53B -_081298E8: .4byte 0x00003b7c -_081298EC: .4byte gUnknown_841B541 -_081298F0: .4byte 0x00003b91 -_081298F4: .4byte gUnknown_841B54B - thumb_func_end copy_strings_to_sav1 - - thumb_func_start sub_81298F8 -sub_81298F8: @ 81298F8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0812991C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bls _08129912 - b _08129B08 -_08129912: - lsls r0, 2 - ldr r1, _08129920 @ =_08129924 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812991C: .4byte gTasks+0x8 -_08129920: .4byte _08129924 - .align 2, 0 -_08129924: - .4byte _08129944 - .4byte _08129952 - .4byte _08129AEC - .4byte _081299A0 - .4byte _08129A8C - .4byte _08129AC4 - .4byte _08129AD8 - .4byte _08129A7C -_08129944: - ldr r0, _08129978 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0812994E - b _08129AE0 -_0812994E: - movs r0, 0x1 - strh r0, [r4] -_08129952: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - strh r0, [r4, 0x8] - ldr r3, _0812997C @ =gUnknown_203B0E0 - ldr r0, [r3] - ldrb r1, [r0, 0xD] - movs r5, 0x8 - ldrsh r0, [r4, r5] - cmp r1, r0 - beq _08129980 - movs r0, 0x2 - strh r0, [r4] - ldr r0, [r3] - strb r2, [r0, 0xD] - b _08129B08 - .align 2, 0 -_08129978: .4byte gReceivedRemoteLinkPlayers -_0812997C: .4byte gUnknown_203B0E0 -_08129980: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x6] - cmp r0, 0 - bne _08129998 - bl sub_80FBA1C - cmp r0, 0 - beq _08129998 - b _08129B08 -_08129998: - movs r0, 0 - strh r0, [r4, 0x2] - movs r0, 0x3 - strh r0, [r4] -_081299A0: - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bgt _081299DA - movs r2, 0x6 - ldrsh r0, [r4, r2] - movs r3, 0x2 - ldrsh r1, [r4, r3] - asrs r0, r1 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _081299DA - movs r2, 0x1 -_081299BC: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _081299DA - movs r5, 0x6 - ldrsh r0, [r4, r5] - movs r3, 0x2 - ldrsh r1, [r4, r3] - asrs r0, r1 - ands r0, r2 - cmp r0, 0 - beq _081299BC -_081299DA: - ldrh r1, [r4, 0x2] - movs r5, 0x2 - ldrsh r0, [r4, r5] - cmp r0, 0x5 - bne _081299E6 - b _08129B04 -_081299E6: - strh r1, [r4, 0x4] - lsls r0, r1, 24 - lsrs r0, 24 - bl ResetBlockReceivedFlag - movs r1, 0x2 - ldrsh r0, [r4, r1] - lsls r0, 8 - ldr r1, _08129A0C @ =gBlockRecvBuffer - adds r0, r1 - ldrb r0, [r0] - subs r0, 0x1 - cmp r0, 0x4 - bhi _08129A28 - lsls r0, 2 - ldr r1, _08129A10 @ =_08129A14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08129A0C: .4byte gBlockRecvBuffer -_08129A10: .4byte _08129A14 - .align 2, 0 -_08129A14: - .4byte _08129A28 - .4byte _08129A2C - .4byte _08129A30 - .4byte _08129A34 - .4byte _08129A38 -_08129A28: - movs r0, 0x3 - b _08129A3A -_08129A2C: - movs r0, 0x3 - b _08129A3A -_08129A30: - movs r0, 0x4 - b _08129A3A -_08129A34: - movs r0, 0x5 - b _08129A3A -_08129A38: - movs r0, 0x6 -_08129A3A: - strh r0, [r4, 0xA] - ldr r5, _08129A68 @ =gUnknown_203B0E0 - ldr r0, [r5] - adds r0, 0x39 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 8 - ldr r2, _08129A6C @ =gBlockRecvBuffer - adds r1, r2 - bl sub_812963C - cmp r0, 0 - beq _08129A70 - ldr r0, [r5] - ldrh r1, [r4, 0x2] - strb r1, [r0, 0x16] - movs r0, 0xC - movs r1, 0x2 - bl sub_8129C34 - movs r0, 0x7 - b _08129A72 - .align 2, 0 -_08129A68: .4byte gUnknown_203B0E0 -_08129A6C: .4byte gBlockRecvBuffer -_08129A70: - ldrh r0, [r4, 0xA] -_08129A72: - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _08129B08 -_08129A7C: - movs r0, 0x2 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129B08 - ldrh r0, [r4, 0xA] - b _08129B06 -_08129A8C: - ldr r6, _08129AB4 @ =gUnknown_203B0E0 - ldr r0, [r6] - ldrb r0, [r0, 0x13] - cmp r0, 0 - bne _08129AC0 - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _08129AC0 - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08129AB8 - bl sub_80FA4A8 - ldr r1, [r6] - movs r0, 0x1 - b _08129ADE - .align 2, 0 -_08129AB4: .4byte gUnknown_203B0E0 -_08129AB8: - movs r5, 0x4 - ldrsh r0, [r4, r5] - bl sub_80FBD6C -_08129AC0: - movs r0, 0x3 - b _08129B06 -_08129AC4: - ldr r0, _08129AD4 @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x13] - cmp r0, 0 - beq _08129AE0 - movs r0, 0x2 - b _08129ADE - .align 2, 0 -_08129AD4: .4byte gUnknown_203B0E0 -_08129AD8: - ldr r0, _08129AE8 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 -_08129ADE: - strb r0, [r1, 0x17] -_08129AE0: - adds r0, r5, 0 - bl DestroyTask - b _08129B08 - .align 2, 0 -_08129AE8: .4byte gUnknown_203B0E0 -_08129AEC: - bl sub_80FBA1C - cmp r0, 0 - bne _08129B08 - ldr r0, _08129B10 @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x13] - cmp r0, 0 - bne _08129B04 - ldrb r0, [r1, 0xD] - bl sub_80FB030 -_08129B04: - movs r0, 0x1 -_08129B06: - strh r0, [r4] -_08129B08: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08129B10: .4byte gUnknown_203B0E0 - thumb_func_end sub_81298F8 - thumb_func_start sub_8129B14 sub_8129B14: @ 8129B14 push {r4,lr} @@ -2497,7 +1737,7 @@ sub_812A804: @ 812A804 movs r0, 0x2 movs r1, 0xFF bl FillWindowPixelBuffer - bl sub_81296F4 + bl GetCurrentKeyboardPage lsls r0, 24 lsrs r2, r0, 24 add r1, sp, 0xC @@ -2774,7 +2014,7 @@ sub_812AA10: @ 812AA10 movs r2, 0xE movs r3, 0x5 bl UnionRoomAndTradeMenuPrintOptions - bl sub_81296F4 + bl GetCurrentKeyboardPage lsls r0, 24 lsrs r0, 24 movs r1, 0xE @@ -3388,7 +2628,7 @@ _0812AF18: .4byte gUnknown_203B0E8 sub_812AF1C: @ 812AF1C push {r4,r5,lr} sub sp, 0x4 - bl sub_81296F4 + bl GetCurrentKeyboardPage adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -3470,7 +2710,7 @@ _0812AFBC: .4byte 0x01010000 thumb_func_start sub_812AFC0 sub_812AFC0: @ 812AFC0 push {lr} - bl sub_81296F4 + bl GetCurrentKeyboardPage lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -3520,7 +2760,7 @@ _0812B010: lsrs r0, 16 cmp r0, 0x3 bls _0812B040 - bl sub_81296F4 + bl GetCurrentKeyboardPage lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -3692,7 +2932,7 @@ _0812B15C: .4byte gUnknown_845B068 thumb_func_start sub_812B160 sub_812B160: @ 812B160 push {r4,lr} - bl sub_81296F4 + bl GetCurrentKeyboardPage lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 diff --git a/data/strings.s b/data/strings.s index e77730429..4102d3616 100644 --- a/data/strings.s +++ b/data/strings.s @@ -3123,10 +3123,10 @@ gUnknown_841B38A:: @ 0x841B38A gUnknown_841B39E:: @ 0x841B39E .string "Input text.$" -gUnknown_841B3AA:: @ 841B3AA +gText_F700JoinedChat:: @ 841B3AA .string "{DYNAMIC 0x00} joined the chat!$" -gUnknown_841B3BE:: @ 841B3BE +gText_F700LeftChat:: @ 841B3BE .string "{DYNAMIC 0x00} left the chat.$" gUnknown_841B3D0:: @ 0x841B3D0 @@ -3161,34 +3161,34 @@ gUnknown_841B4D9:: @ 0x841B4D9 .string "If the LEADER leaves, the chat\n" .string "will end. Is that okay?$" -gUnknown_841B510:: @ 841B510 +gText_Hello:: @ 841B510 .string "HELLO$" -gUnknown_841B516:: @ 841B516 +gText_Pokemon2:: @ 841B516 .string "POKéMON$" -gUnknown_841B51E:: @ 841B51E +gText_Trade:: @ 841B51E .string "TRADE$" -gUnknown_841B524:: @ 841B524 +gText_Battle:: @ 841B524 .string "BATTLE$" -gUnknown_841B52B:: @ 841B52B +gText_Lets:: @ 841B52B .string "LET'S$" -gUnknown_841B531:: @ 841B531 +gText_Ok:: @ 841B531 .string "OK!$" -gUnknown_841B535:: @ 841B535 +gText_Sorry:: @ 841B535 .string "SORRY$" -gUnknown_841B53B:: @ 841B53B +gText_YaySmileEmoji:: @ 841B53B .string "YAY{EXTRA 0xF9}$" -gUnknown_841B541:: @ 841B541 +gText_ThankYou:: @ 841B541 .string "THANK YOU$" -gUnknown_841B54B:: @ 841B54B +gText_ByeBye:: @ 841B54B .string "BYE-BYE!$" gUnknown_841B554:: @ 841B554 diff --git a/include/link_rfu.h b/include/link_rfu.h index 9dac781b3..8e4da4d87 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -327,6 +327,8 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx); bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx); bool32 sub_80FBA1C(void); void sub_80FA4A8(void); +void sub_80FB9D0(void); +void sub_80FB030(u32 a0); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/strings.h b/include/strings.h index a57493a9b..81cbc63c1 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1061,4 +1061,18 @@ extern const u8 gText_CommStandbyAwaitingOtherPlayer[]; extern const u8 gText_RefusedBattle[]; extern const u8 gText_BattleWasRefused[]; +// union_room_chat +extern const u8 gText_F700JoinedChat[]; +extern const u8 gText_F700LeftChat[]; +extern const u8 gText_Hello[]; +extern const u8 gText_Pokemon2[]; +extern const u8 gText_Trade[]; +extern const u8 gText_Battle[]; +extern const u8 gText_Lets[]; +extern const u8 gText_Ok[]; +extern const u8 gText_Sorry[]; +extern const u8 gText_YaySmileEmoji[]; +extern const u8 gText_ThankYou[]; +extern const u8 gText_ByeBye[]; + #endif //GUARD_STRINGS_H diff --git a/src/union_room_chat.c b/src/union_room_chat.c index c171731c2..abd763367 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1,5 +1,6 @@ #include "global.h" #include "gflib.h" +#include "dynamic_placeholder_text_util.h" #include "help_system.h" #include "link.h" #include "link_rfu.h" @@ -10,6 +11,7 @@ #include "quest_log.h" #include "save.h" #include "scanline_effect.h" +#include "strings.h" #include "task.h" #include "data_8479668.h" #include "constants/songs.h" @@ -1110,5 +1112,310 @@ u16 sub_812951C(void) void sub_8129560(u8 *arg0) { - arg0[0] = CHAR_SPACE; + arg0[0] = 0; +} + +void sub_8129568(u8 *arg0) +{ + arg0[0] = 2; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; +} + +void sub_8129590(u8 *arg0) +{ + arg0[0] = 1; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_203B0E0->unk1A); +} + +void sub_81295C0(u8 *arg0) +{ + arg0[0] = 3; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + sub_80FB9D0(); +} + +void sub_81295EC(u8 *arg0) +{ + arg0[0] = 4; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; +} + +void sub_8129614(u8 *arg0) +{ + arg0[0] = 5; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; +} + +bool32 sub_812963C(u8 *arg0, u8 *arg1) +{ + u8 *tempStr; + u8 var0 = *arg1; + u8 *str = arg1 + 1; + arg1 = str; + arg1 += 8; + + switch (var0) + { + case 2: + if (gUnknown_203B0E0->unk13 != str[8]) + { + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700JoinedChat); + return TRUE; + } + break; + case 1: + tempStr = StringCopy(arg0, str); + *(tempStr++) = EXT_CTRL_CODE_BEGIN; + *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO; + *(tempStr++) = 42; + *(tempStr++) = CHAR_COLON; + StringCopy(tempStr, arg1); + return TRUE; + case 5: + StringCopy(gUnknown_203B0E0->unk79, str); + // fall through + case 3: + if (gUnknown_203B0E0->unk13 != *arg1) + { + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700LeftChat); + return TRUE; + } + break; + } + + return FALSE; +} + +u8 GetCurrentKeyboardPage(void) +{ + return gUnknown_203B0E0->currentPage; +} + +void sub_8129700(u8 *arg0, u8 *arg1) +{ + *arg0 = gUnknown_203B0E0->unk11; + *arg1 = gUnknown_203B0E0->currentRow; +} + +u8 *sub_8129714(void) +{ + return gUnknown_203B0E0->unk1A; +} + +int sub_8129720(void) +{ + u8 *str = sub_8129714(); + return StringLength_Multibyte(str); +} + +void sub_8129730(u32 *arg0, u32 *arg1) +{ + int diff = gUnknown_203B0E0->unk15 - gUnknown_203B0E0->unk14; + if (diff < 0) + { + diff *= -1; + *arg0 = gUnknown_203B0E0->unk15; + } + else + { + *arg0 = gUnknown_203B0E0->unk14; + } + + *arg1 = diff; +} + +u8 *sub_8129758(void) +{ + int i; + u16 numChars = sub_812951C(); + u8 *str = gUnknown_203B0E0->unk1A; + for (i = 0; i < numChars; i++) + { + if (*str == CHAR_EXTRA_EMOJI) + str++; + + str++; + } + + return str; +} + +u16 sub_8129788(void) +{ + u16 count; + u32 i; + u16 numChars = sub_812951C(); + u8 *str = gUnknown_203B0E0->unk1A; + for (count = 0, i = 0; i < numChars; count++, i++) + { + if (*str == CHAR_EXTRA_EMOJI) + str++; + + str++; + } + + return count; +} + +u8 *sub_81297C4(void) +{ + return gUnknown_203B0E0->unk39; +} + +u8 sub_81297D0(void) +{ + return gUnknown_203B0E0->unk16; +} + +int sub_81297DC(void) +{ + return gUnknown_203B0E0->unk15; +} + +int sub_81297E8(void) +{ + u8 *str = sub_81294EC(); + u32 character = *str; + if (character > 0xFF || gUnknown_845A8AC[character] == character || gUnknown_845A8AC[character] == 0) + return 3; + else + return 0; +} + +u8 *sub_8129814(void) +{ + return gUnknown_203B0E0->unk79; +} + +void copy_strings_to_sav1(void) +{ + StringCopy(gSaveBlock1Ptr->unk3AD4[0], gText_Hello); + StringCopy(gSaveBlock1Ptr->unk3AD4[1], gText_Pokemon2); + StringCopy(gSaveBlock1Ptr->unk3AD4[2], gText_Trade); + StringCopy(gSaveBlock1Ptr->unk3AD4[3], gText_Battle); + StringCopy(gSaveBlock1Ptr->unk3AD4[4], gText_Lets); + StringCopy(gSaveBlock1Ptr->unk3AD4[5], gText_Ok); + StringCopy(gSaveBlock1Ptr->unk3AD4[6], gText_Sorry); + StringCopy(gSaveBlock1Ptr->unk3AD4[7], gText_YaySmileEmoji); + StringCopy(gSaveBlock1Ptr->unk3AD4[8], gText_ThankYou); + StringCopy(gSaveBlock1Ptr->unk3AD4[9], gText_ByeBye); +} + +void sub_81298F8(u8 taskId) +{ + u8 *buffer; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + DestroyTask(taskId); + return; + } + + data[0] = 1; + // fall through + case 1: + data[4] = GetLinkPlayerCount(); + if (gUnknown_203B0E0->unkD != data[4]) + { + data[0] = 2; + gUnknown_203B0E0->unkD = data[4]; + return; + } + + data[3] = GetBlockReceivedStatus(); + if (!data[3] && sub_80FBA1C()) + return; + + data[1] = 0; + data[0] = 3; + // fall through + case 3: + for (; data[1] < 5 && ((data[3] >> data[1]) & 1) == 0; data[1]++) + ; + + if (data[1] == 5) + { + data[0] = 1; + return; + } + + data[2] = data[1]; + ResetBlockReceivedFlag(data[2]); + buffer = (u8 *)gBlockRecvBuffer[data[1]]; + switch (buffer[0]) + { + default: + case 1: data[5] = 3; break; + case 2: data[5] = 3; break; + case 3: data[5] = 4; break; + case 4: data[5] = 5; break; + case 5: data[5] = 6; break; + } + + if (sub_812963C(gUnknown_203B0E0->unk39, (u8 *)gBlockRecvBuffer[data[1]])) + { + gUnknown_203B0E0->unk16 = data[1]; + sub_8129C34(12, 2); + data[0] = 7; + } + else + { + data[0] = data[5]; + } + + data[1]++; + break; + case 7: + if (!sub_8129C8C(2)) + data[0] = data[5]; + break; + case 4: + if (!gUnknown_203B0E0->unk13 && data[2]) + { + if (GetLinkPlayerCount() == 2) + { + sub_80FA4A8(); + gUnknown_203B0E0->unk17 = 1; + DestroyTask(taskId); + return; + } + + sub_80FBD6C(data[2]); + } + + data[0] = 3; + break; + case 5: + if (gUnknown_203B0E0->unk13) + gUnknown_203B0E0->unk17 = 2; + + DestroyTask(taskId); + break; + case 6: + gUnknown_203B0E0->unk17 = 3; + DestroyTask(taskId); + break; + case 2: + if (!sub_80FBA1C()) + { + if (!gUnknown_203B0E0->unk13) + sub_80FB030(gUnknown_203B0E0->unkD); + + data[0] = 1; + } + break; + } } From f249df41e3620c210841b57b7520f53b692fd411 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 10:47:17 -0500 Subject: [PATCH 06/11] union_room_chat_display through sub_812A1B8 --- asm/union_room_chat.s | 929 ------------------------------ data/union_room_chat.s | 128 ---- include/union_room_chat.h | 7 +- include/union_room_chat_display.h | 12 + include/union_room_chat_objects.h | 16 + ld_script.txt | 2 + src/union_room_chat.c | 8 +- src/union_room_chat_display.c | 656 +++++++++++++++++++++ 8 files changed, 693 insertions(+), 1065 deletions(-) create mode 100644 include/union_room_chat_display.h create mode 100644 include/union_room_chat_objects.h create mode 100644 src/union_room_chat_display.c diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 422a8786b..7a9d41ef3 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5,935 +5,6 @@ .text - thumb_func_start sub_8129B14 -sub_8129B14: @ 8129B14 - push {r4,lr} - ldr r4, _08129B60 @ =gUnknown_203B0E4 - ldr r0, _08129B64 @ =0x00002168 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _08129B70 - bl sub_812AE70 - cmp r0, 0 - beq _08129B70 - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08129B68 @ =gUnknown_845AA84 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, _08129B6C @ =gUnknown_845AA94 - bl InitWindows - bl ResetTempTileDataBuffers - bl sub_812AD50 - ldr r0, [r4] - bl sub_8129BB8 - bl sub_8129BC4 - movs r0, 0 - movs r1, 0 - bl sub_8129C34 - movs r0, 0x1 - b _08129B72 - .align 2, 0 -_08129B60: .4byte gUnknown_203B0E4 -_08129B64: .4byte 0x00002168 -_08129B68: .4byte gUnknown_845AA84 -_08129B6C: .4byte gUnknown_845AA94 -_08129B70: - movs r0, 0 -_08129B72: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129B14 - - thumb_func_start sub_8129B78 -sub_8129B78: @ 8129B78 - push {lr} - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8129B78 - - thumb_func_start sub_8129B88 -sub_8129B88: @ 8129B88 - push {r4,lr} - bl sub_812AEB0 - ldr r4, _08129BB0 @ =gUnknown_203B0E4 - ldr r0, [r4] - cmp r0, 0 - beq _08129B9E - bl Free - movs r0, 0 - str r0, [r4] -_08129B9E: - bl FreeAllWindowBuffers - ldr r1, _08129BB4 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129BB0: .4byte gUnknown_203B0E4 -_08129BB4: .4byte gScanlineEffect - thumb_func_end sub_8129B88 - - thumb_func_start sub_8129BB8 -sub_8129BB8: @ 8129BB8 - movs r2, 0 - movs r1, 0xFF - strh r1, [r0, 0x18] - strh r1, [r0, 0x1E] - strh r2, [r0, 0x1A] - bx lr - thumb_func_end sub_8129BB8 - - thumb_func_start sub_8129BC4 -sub_8129BC4: @ 8129BC4 - push {r4,r5,lr} - ldr r1, _08129BF4 @ =gUnknown_203B0E4 - ldr r0, [r1] - cmp r0, 0 - beq _08129BEC - movs r2, 0 - adds r4, r1, 0 - ldr r5, _08129BF8 @ =sub_812A420 - movs r3, 0 -_08129BD6: - ldr r0, [r4] - lsls r1, r2, 3 - adds r0, r1 - str r5, [r0] - strb r3, [r0, 0x4] - ldr r0, [r4] - adds r0, r1 - strb r3, [r0, 0x5] - adds r2, 0x1 - cmp r2, 0x2 - ble _08129BD6 -_08129BEC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08129BF4: .4byte gUnknown_203B0E4 -_08129BF8: .4byte sub_812A420 - thumb_func_end sub_8129BC4 - - thumb_func_start sub_8129BFC -sub_8129BFC: @ 8129BFC - push {r4-r6,lr} - ldr r1, _08129C30 @ =gUnknown_203B0E4 - ldr r0, [r1] - cmp r0, 0 - beq _08129C2A - movs r5, 0 - adds r6, r1, 0 -_08129C0A: - ldr r0, [r6] - lsls r4, r5, 3 - adds r1, r0, r4 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08129C24 - adds r0, r1, 0x5 - ldr r1, [r1] - bl _call_via_r1 - ldr r1, [r6] - adds r1, r4 - strb r0, [r1, 0x4] -_08129C24: - adds r5, 0x1 - cmp r5, 0x2 - ble _08129C0A -_08129C2A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08129C30: .4byte gUnknown_203B0E4 - thumb_func_end sub_8129BFC - - thumb_func_start sub_8129C34 -sub_8129C34: @ 8129C34 - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - ldr r3, _08129C70 @ =gUnknown_203B0E4 - ldr r0, [r3] - lsrs r1, 21 - adds r0, r1 - ldr r2, _08129C74 @ =sub_812A420 - str r2, [r0] - movs r4, 0 - adds r5, r3, 0 - adds r3, r1, 0 - mov r12, r4 - ldr r1, _08129C78 @ =gUnknown_845AABC - movs r7, 0x1 - adds r2, r1, 0x4 -_08129C56: - ldrh r0, [r1] - cmp r0, r6 - bne _08129C7C - ldr r1, [r5] - adds r1, r3 - ldr r0, [r2] - str r0, [r1] - strb r7, [r1, 0x4] - ldr r0, [r5] - adds r0, r3 - mov r1, r12 - strb r1, [r0, 0x5] - b _08129C86 - .align 2, 0 -_08129C70: .4byte gUnknown_203B0E4 -_08129C74: .4byte sub_812A420 -_08129C78: .4byte gUnknown_845AABC -_08129C7C: - adds r1, 0x8 - adds r2, 0x8 - adds r4, 0x1 - cmp r4, 0x14 - bls _08129C56 -_08129C86: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8129C34 - - thumb_func_start sub_8129C8C -sub_8129C8C: @ 8129C8C - lsls r0, 24 - ldr r1, _08129C9C @ =gUnknown_203B0E4 - ldr r1, [r1] - lsrs r0, 21 - adds r1, r0 - ldrb r0, [r1, 0x4] - bx lr - .align 2, 0 -_08129C9C: .4byte gUnknown_203B0E4 - thumb_func_end sub_8129C8C - - thumb_func_start sub_8129CA0 -sub_8129CA0: @ 8129CA0 - push {r4,lr} - adds r4, r0, 0 - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08129D36 - ldrb r0, [r4] - cmp r0, 0x6 - bhi _08129D2C - lsls r0, 2 - ldr r1, _08129CC0 @ =_08129CC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08129CC0: .4byte _08129CC4 - .align 2, 0 -_08129CC4: - .4byte _08129CE0 - .4byte _08129CEA - .4byte _08129CF0 - .4byte _08129CF6 - .4byte _08129CFC - .4byte _08129D02 - .4byte _08129D14 -_08129CE0: - bl sub_812AAD4 - bl sub_812AB8C - b _08129D30 -_08129CEA: - bl sub_812ABD8 - b _08129D30 -_08129CF0: - bl sub_812AC08 - b _08129D30 -_08129CF6: - bl sub_812AC58 - b _08129D30 -_08129CFC: - bl sub_812AC9C - b _08129D30 -_08129D02: - bl sub_812ACC0 - bl sub_812ACEC - bl sub_812AD20 - bl sub_812AD04 - b _08129D30 -_08129D14: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129D30 - bl sub_812AEC8 - bl sub_812B048 - bl sub_812B100 - b _08129D30 -_08129D2C: - movs r0, 0 - b _08129D38 -_08129D30: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129D36: - movs r0, 0x1 -_08129D38: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129CA0 - - thumb_func_start sub_8129D40 -sub_8129D40: @ 8129D40 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129D50 - cmp r0, 0x1 - beq _08129D5E - b _08129D68 -_08129D50: - bl sub_812AA10 - movs r0, 0x3 - movs r1, 0x3 - bl CopyWindowToVram - b _08129D68 -_08129D5E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _08129D70 -_08129D68: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 -_08129D70: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129D40 - - thumb_func_start sub_8129D78 -sub_8129D78: @ 8129D78 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129D88 - cmp r0, 0x1 - beq _08129D96 - b _08129DA0 -_08129D88: - bl sub_812AA64 - movs r0, 0x3 - movs r1, 0x3 - bl CopyWindowToVram - b _08129DA0 -_08129D96: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _08129DA8 -_08129DA0: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 -_08129DA8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129D78 - - thumb_func_start sub_8129DB0 -sub_8129DB0: @ 8129DB0 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08129DE6 - cmp r0, 0x1 - bgt _08129DC4 - cmp r0, 0 - beq _08129DCA - b _08129E0C -_08129DC4: - cmp r0, 0x2 - beq _08129DF2 - b _08129E0C -_08129DCA: - movs r0, 0x1 - bl sub_812AEFC - bl sub_812A980 - cmp r0, 0 - bne _08129E12 - bl sub_812A804 - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - b _08129E0C -_08129DE6: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _08129E0C - b _08129E12 -_08129DF2: - bl sub_812A9C8 - cmp r0, 0 - bne _08129E12 - bl sub_812AF1C - movs r0, 0 - bl sub_812AEFC - bl sub_812B160 - movs r0, 0 - b _08129E14 -_08129E0C: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129E12: - movs r0, 0x1 -_08129E14: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129DB0 - - thumb_func_start sub_8129E1C -sub_8129E1C: @ 8129E1C - push {lr} - bl sub_812AF1C - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8129E1C - - thumb_func_start sub_8129E28 -sub_8129E28: @ 8129E28 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129E38 - cmp r0, 0x1 - beq _08129E5C - b _08129E66 -_08129E38: - movs r0, 0 - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xB - movs r2, 0x1 - bl sub_812A424 - ldr r0, _08129E58 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - b _08129E66 - .align 2, 0 -_08129E58: .4byte gUnknown_203B0E4 -_08129E5C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _08129E6E -_08129E66: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 -_08129E6E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129E28 - - thumb_func_start sub_8129E74 -sub_8129E74: @ 8129E74 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129E84 - cmp r0, 0x1 - beq _08129E94 - b _08129EAA -_08129E84: - bl sub_812A6F4 - bl sub_812A51C - movs r0, 0 - bl CopyBgTilemapBufferToVram - b _08129EAA -_08129E94: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129EB0 - bl sub_812A728 - bl sub_812A544 - movs r0, 0 - b _08129EB2 -_08129EAA: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129EB0: - movs r0, 0x1 -_08129EB2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129E74 - - thumb_func_start sub_8129EB8 -sub_8129EB8: @ 8129EB8 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129ECA - cmp r0, 0x1 - beq _08129F02 - b _08129F14 -_08129ECA: - add r1, sp, 0x8 - add r0, sp, 0x4 - bl sub_8129730 - ldr r0, [sp, 0x4] - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp, 0x8] - lsls r1, 16 - lsrs r1, 16 - movs r2, 0 - bl sub_812A74C - bl sub_8129714 - adds r1, r0, 0 - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - movs r2, 0x3 - movs r3, 0x1 - bl sub_812A778 - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - b _08129F14 -_08129F02: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129F1A - bl sub_812B160 - movs r0, 0 - b _08129F1C -_08129F14: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129F1A: - movs r0, 0x1 -_08129F1C: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129EB8 - - thumb_func_start sub_8129F24 -sub_8129F24: @ 8129F24 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldrb r0, [r6] - cmp r0, 0x1 - beq _08129F80 - cmp r0, 0x1 - bgt _08129F3A - cmp r0, 0 - beq _08129F44 - b _08129FBA -_08129F3A: - cmp r0, 0x2 - beq _08129FA4 - cmp r0, 0x3 - beq _08129FB6 - b _08129FBA -_08129F44: - bl sub_8129788 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_8129758 - adds r5, r0, 0 - bl StringLength_Multibyte - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0x66 - bl sub_812A74C - movs r0, 0x5 - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0x4 - bl sub_812A778 - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - b _08129FBA -_08129F80: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129FC0 - movs r0, 0x1 - movs r1, 0x10 - bl sub_812A578 - ldr r0, _08129FA0 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - b _08129FBA - .align 2, 0 -_08129FA0: .4byte gUnknown_203B0E4 -_08129FA4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129FC0 - movs r0, 0x1 - bl sub_812AF8C - b _08129FBA -_08129FB6: - movs r0, 0 - b _08129FC2 -_08129FBA: - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_08129FC0: - movs r0, 0x1 -_08129FC2: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8129F24 - - thumb_func_start sub_8129FCC -sub_8129FCC: @ 8129FCC - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldrb r0, [r6] - cmp r0, 0x1 - beq _0812A028 - cmp r0, 0x1 - bgt _08129FE2 - cmp r0, 0 - beq _08129FEC - b _0812A062 -_08129FE2: - cmp r0, 0x2 - beq _0812A048 - cmp r0, 0x3 - beq _0812A05E - b _0812A062 -_08129FEC: - bl sub_8129788 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_8129758 - adds r5, r0, 0 - bl StringLength_Multibyte - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_812A74C - movs r0, 0x2 - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x3 - movs r3, 0x1 - bl sub_812A778 - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - b _0812A062 -_0812A028: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A068 - bl sub_812A6F4 - ldr r0, _0812A044 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - b _0812A062 - .align 2, 0 -_0812A044: .4byte gUnknown_203B0E4 -_0812A048: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A068 - movs r0, 0 - bl sub_812AF8C - bl sub_812A728 - b _0812A062 -_0812A05E: - movs r0, 0 - b _0812A06A -_0812A062: - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0812A068: - movs r0, 0x1 -_0812A06A: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8129FCC - - thumb_func_start sub_812A074 -sub_812A074: @ 812A074 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A084 - cmp r0, 0x1 - beq _0812A098 - b _0812A0A6 -_0812A084: - bl sub_812A804 - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A0A6 -_0812A098: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A0A6 - movs r0, 0 - b _0812A0A8 -_0812A0A6: - movs r0, 0x1 -_0812A0A8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A074 - - thumb_func_start sub_812A0B0 -sub_812A0B0: @ 812A0B0 - push {r4-r6,lr} - adds r6, r0, 0 - ldrb r0, [r6] - cmp r0, 0x4 - bhi _0812A182 - lsls r0, 2 - ldr r1, _0812A0C4 @ =_0812A0C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812A0C4: .4byte _0812A0C8 - .align 2, 0 -_0812A0C8: - .4byte _0812A0DC - .4byte _0812A108 - .4byte _0812A138 - .4byte _0812A15C - .4byte _0812A126 -_0812A0DC: - ldr r0, _0812A104 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrh r5, [r0, 0x1A] - bl sub_81297C4 - adds r4, r0, 0 - bl sub_81297D0 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_812AA78 - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - b _0812A17C - .align 2, 0 -_0812A104: .4byte gUnknown_203B0E4 -_0812A108: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0812A182 - ldr r0, _0812A12C @ =gUnknown_203B0E4 - ldr r1, [r0] - ldrh r0, [r1, 0x1A] - cmp r0, 0x8 - bhi _0812A130 - adds r0, 0x1 - strh r0, [r1, 0x1A] - movs r0, 0x4 - strb r0, [r6] -_0812A126: - movs r0, 0 - b _0812A184 - .align 2, 0 -_0812A12C: .4byte gUnknown_203B0E4 -_0812A130: - strh r2, [r1, 0x1C] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0812A138: - movs r0, 0 - movs r1, 0 - movs r2, 0x5 - movs r3, 0x11 - bl ScrollWindow - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, _0812A178 @ =gUnknown_203B0E4 - ldr r1, [r0] - ldrh r0, [r1, 0x1C] - adds r0, 0x1 - strh r0, [r1, 0x1C] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0812A15C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A182 - ldr r0, _0812A178 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrh r0, [r0, 0x1C] - cmp r0, 0x2 - bhi _0812A17C - ldrb r0, [r6] - subs r0, 0x1 - b _0812A180 - .align 2, 0 -_0812A178: .4byte gUnknown_203B0E4 -_0812A17C: - ldrb r0, [r6] - adds r0, 0x1 -_0812A180: - strb r0, [r6] -_0812A182: - movs r0, 0x1 -_0812A184: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_812A0B0 - - thumb_func_start sub_812A18C -sub_812A18C: @ 812A18C - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A19C - cmp r0, 0x1 - beq _0812A1A8 - b _0812A1AE -_0812A19C: - bl sub_812AFC0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A1AE -_0812A1A8: - bl sub_812AFFC - b _0812A1B0 -_0812A1AE: - movs r0, 0x1 -_0812A1B0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A18C - - thumb_func_start sub_812A1B8 -sub_812A1B8: @ 812A1B8 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A1C8 - cmp r0, 0x1 - beq _0812A1E8 - b _0812A1F2 -_0812A1C8: - movs r0, 0x3 - movs r1, 0x10 - bl sub_812A578 - ldr r0, _0812A1E4 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A1F2 - .align 2, 0 -_0812A1E4: .4byte gUnknown_203B0E4 -_0812A1E8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A1F4 -_0812A1F2: - movs r0, 0x1 -_0812A1F4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A1B8 - thumb_func_start sub_812A1FC sub_812A1FC: @ 812A1FC push {r4,lr} diff --git a/data/union_room_chat.s b/data/union_room_chat.s index 0a51e90a4..d79974946 100644 --- a/data/union_room_chat.s +++ b/data/union_room_chat.s @@ -6,134 +6,6 @@ .section .rodata .align 2 -gUnknown_845AA24:: @ 845AA24 - .incbin "graphics/union_room_chat/unk_845AA24.gbapal" - -gUnknown_845AA44:: @ 845AA44 - .incbin "graphics/union_room_chat/unk_845AA44.gbapal" - -gUnknown_845AA64:: @ 845AA64 - .incbin "graphics/union_room_chat/unk_845AA64.gbapal" - -gUnknown_845AA84:: @ 845AA84 - .4byte 0x00000070 - @ { - @ .bg = 0, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 7, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x000011fd - @ { - @ .bg = 1, - @ .charBaseIndex = 3, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - .4byte 0x0000217a - @ { - @ .bg = 2, - @ .charBaseIndex = 2, - @ .mapBaseIndex = 23, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x000070f7 - @ { - @ .bg = 3, - @ .charBaseIndex = 1, - @ .mapBaseIndex = 15, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0001 - @ } - -gUnknown_845AA94:: @ 845AA94 - .byte 3, 8, 1, 21, 19, 15 - .2byte 0x0001 - .byte 1, 9, 18, 15, 2, 12 - .2byte 0x007a - .byte 1, 0, 2, 6, 15, 7 - .2byte 0x0020 - .byte 0, 1, 2, 7, 9, 14 - .2byte 0x0013 - .byte 255, 0, 0, 0, 0, 0 - .2byte 0x0000 - -gUnknown_845AABC:: @ 845AABC - .2byte 0x00 - .align 2 - .4byte sub_8129CA0 - .2byte 0x03 - .align 2 - .4byte sub_8129D40 - .2byte 0x04 - .align 2 - .4byte sub_8129D78 - .2byte 0x05 - .align 2 - .4byte sub_8129DB0 - .2byte 0x01 - .align 2 - .4byte sub_8129E1C - .2byte 0x06 - .align 2 - .4byte sub_8129E28 - .2byte 0x07 - .align 2 - .4byte sub_8129E74 - .2byte 0x08 - .align 2 - .4byte sub_8129EB8 - .2byte 0x09 - .align 2 - .4byte sub_8129F24 - .2byte 0x0a - .align 2 - .4byte sub_8129FCC - .2byte 0x0b - .align 2 - .4byte sub_812A074 - .2byte 0x0c - .align 2 - .4byte sub_812A0B0 - .2byte 0x02 - .align 2 - .4byte sub_812A18C - .2byte 0x0d - .align 2 - .4byte sub_812A1B8 - .2byte 0x12 - .align 2 - .4byte sub_812A1FC - .2byte 0x13 - .align 2 - .4byte sub_812A240 - .2byte 0x0e - .align 2 - .4byte sub_812A294 - .2byte 0x0f - .align 2 - .4byte sub_812A2E4 - .2byte 0x10 - .align 2 - .4byte sub_812A334 - .2byte 0x11 - .align 2 - .4byte sub_812A378 - .2byte 0x14 - .align 2 - .4byte sub_812A3D0 - gUnknown_845AB64:: @ 845AB64 .4byte gUnknown_841B366 .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 diff --git a/include/union_room_chat.h b/include/union_room_chat.h index 66daac376..3488e71bc 100644 --- a/include/union_room_chat.h +++ b/include/union_room_chat.h @@ -1,8 +1,13 @@ #ifndef GUARD_UNION_ROOM_CHAT_H #define GUARD_UNION_ROOM_CHAT_H -void sub_801DD98(void); void sub_8128420(void); +u8 *sub_8129714(void); +void sub_8129730(u32 *a0, u32 *a1); +u8 *sub_8129758(void); +u16 sub_8129788(void); +u8 *sub_81297C4(void); +u16 sub_81297D0(void); void copy_strings_to_sav1(void); #endif // GUARD_UNION_ROOM_CHAT_H diff --git a/include/union_room_chat_display.h b/include/union_room_chat_display.h new file mode 100644 index 000000000..597296869 --- /dev/null +++ b/include/union_room_chat_display.h @@ -0,0 +1,12 @@ +#ifndef GUARD_UNION_ROOM_CHAT_DISPLAY_H +#define GUARD_UNION_ROOM_CHAT_DISPLAY_H + +bool8 sub_8129B14(void); +bool32 sub_8129B78(void); +void sub_8129B88(void); +void sub_8129BFC(void); +void sub_8129C34(u16 a0, u8 a1); +u8 sub_8129C8C(u8 a0); +s8 sub_812A568(void); + +#endif //GUARD_UNION_ROOM_CHAT_DISPLAY_H diff --git a/include/union_room_chat_objects.h b/include/union_room_chat_objects.h new file mode 100644 index 000000000..41db4d3a4 --- /dev/null +++ b/include/union_room_chat_objects.h @@ -0,0 +1,16 @@ +#ifndef GUARD_UNION_ROOM_CHAT_OBJECTS_H +#define GUARD_UNION_ROOM_CHAT_OBJECTS_H + +bool32 sub_812AE70(void); +void sub_812AEB0(void); +void sub_812AEC8(void); +void sub_812AEFC(bool8 invisible); +void sub_812AF1C(void); +void sub_812AF8C(u32 idx); +void sub_812AFC0(void); +bool32 sub_812AFFC(void); +void sub_812B048(void); +void sub_812B100(void); +void sub_812B160(void); + +#endif //GUARD_UNION_ROOM_CHAT_OBJECTS_H diff --git a/ld_script.txt b/ld_script.txt index c21f61f53..c02fc0f08 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -247,6 +247,7 @@ SECTIONS { asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); src/union_room_chat.o(.text); + src/union_room_chat_display.o(.text); asm/union_room_chat.o(.text); src/help_system_812B1E0.o(.text); src/quest_log_battle.o(.text); @@ -536,6 +537,7 @@ SECTIONS { data/pokemon_special_anim.o(.rodata); src/party_menu.o(.rodata); src/union_room_chat.o(.rodata); + src/union_room_chat_display.o(.rodata); data/union_room_chat.o(.rodata); src/help_system_812B1E0.o(.rodata); src/fame_checker.o(.rodata); diff --git a/src/union_room_chat.c b/src/union_room_chat.c index abd763367..936803f80 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -13,6 +13,7 @@ #include "scanline_effect.h" #include "strings.h" #include "task.h" +#include "union_room_chat_display.h" #include "data_8479668.h" #include "constants/songs.h" @@ -89,13 +90,6 @@ void sub_81295EC(u8 *ptr); void sub_8129614(u8 *ptr); u8 *sub_8129758(void); void sub_81298F8(u8 taskId); -void sub_8129B14(void); -bool32 sub_8129B78(void); -void sub_8129B88(void); -void sub_8129BFC(void); -void sub_8129C34(u16 a0, u8 a1); -u8 sub_8129C8C(u8 a0); -s8 sub_812A568(void); static void (*const gUnknown_845A880[])(void) = { sub_8128640, diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c new file mode 100644 index 000000000..993481d3d --- /dev/null +++ b/src/union_room_chat_display.c @@ -0,0 +1,656 @@ +#include "global.h" +#include "gflib.h" +#include "new_menu_helpers.h" +#include "scanline_effect.h" +#include "union_room_chat.h" +#include "union_room_chat_display.h" +#include "union_room_chat_objects.h" + +struct UnionRoomChat2_Unk0 +{ + bool32 (*unk0)(u8 *); + u8 unk4; + u8 unk5; +}; + +struct UnionRoomChat2 +{ + struct UnionRoomChat2_Unk0 unk0[3]; + u16 unk18; + u16 unk1A; + u16 unk1C; + u16 unk1E; + s16 unk20; + u8 unk22[0x106]; + u8 unk128[BG_SCREEN_SIZE]; + u8 unk928[BG_SCREEN_SIZE]; + u8 unk1128[BG_SCREEN_SIZE]; + u8 unk1928[BG_SCREEN_SIZE]; + u8 unk2128[0x20]; + u8 unk2148[0x20]; +}; + +struct Unk845AABC +{ + u16 unk0; + bool32 (*unk4)(u8 *); +}; + +EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; + +void sub_8129BB8(struct UnionRoomChat2 * ptr); +void sub_8129BC4(void); +bool32 sub_8129CA0(u8 *state); +bool32 sub_8129D40(u8 *state); +bool32 sub_8129D78(u8 *state); +bool32 sub_8129DB0(u8 *state); +bool32 sub_8129E1C(u8 *state); +bool32 sub_8129E28(u8 *state); +bool32 sub_8129E74(u8 *state); +bool32 sub_8129EB8(u8 *state); +bool32 sub_8129F24(u8 *state); +bool32 sub_8129FCC(u8 *state); +bool32 sub_812A074(u8 *state); +bool32 sub_812A0B0(u8 *state); +bool32 sub_812A18C(u8 *state); +bool32 sub_812A1B8(u8 *state); +bool32 sub_812A1FC(u8 *state); +bool32 sub_812A240(u8 *state); +bool32 sub_812A294(u8 *state); +bool32 sub_812A2E4(u8 *state); +bool32 sub_812A334(u8 *state); +bool32 sub_812A378(u8 *state); +bool32 sub_812A3D0(u8 *state); +bool32 sub_812A420(u8 *state); +void sub_812A424(u8 a0, u8 a1, u8 a2); +void sub_812A51C(void); +void sub_812A544(void); +void sub_812A578(int a0, u16 a1); +void sub_812A6F4(void); +void sub_812A728(void); +void sub_812A74C(u16 a0, u16 a1, u8 a2); +void sub_812A778(u16 a0, u8 *a1, u8 a2, u8 a3, u8 a4); +void sub_812A804(void); +bool32 sub_812A980(void); +bool32 sub_812A9C8(void); +void sub_812AA10(void); +void sub_812AA64(void); +void sub_812AA78(u16 a0, u8 *a1, u8 a2); +void sub_812AAD4(void); +void sub_812AB8C(void); +void sub_812ABD8(void); +void sub_812AC08(void); +void sub_812AC58(void); +void sub_812AC9C(void); +void sub_812ACC0(void); +void sub_812ACEC(void); +void sub_812AD04(void); +void sub_812AD20(void); +void sub_812AD50(void); + +const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); +const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); +const u16 gUnknown_845AA64[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); + +const struct BgTemplate gUnknown_845AA84[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x0000 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x0000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 23, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x0000 + }, { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x0001 + } +}; + +const struct WindowTemplate gUnknown_845AA94[] = { + { + .bg = 3, + .tilemapLeft = 8, + .tilemapTop = 1, + .width = 21, + .height = 19, + .paletteNum = 15, + .baseBlock = 0x001 + }, { + .bg = 1, + .tilemapLeft = 9, + .tilemapTop = 18, + .width = 15, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x07a + }, { + .bg = 1, + .tilemapLeft = 0, + .tilemapTop = 2, + .width = 6, + .height = 15, + .paletteNum = 7, + .baseBlock = 0x020 + }, { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 2, + .width = 7, + .height = 9, + .paletteNum = 14, + .baseBlock = 0x013 + }, DUMMY_WIN_TEMPLATE +}; + +const struct Unk845AABC gUnknown_845AABC[] = { + { 0, sub_8129CA0}, + { 3, sub_8129D40}, + { 4, sub_8129D78}, + { 5, sub_8129DB0}, + { 1, sub_8129E1C}, + { 6, sub_8129E28}, + { 7, sub_8129E74}, + { 8, sub_8129EB8}, + { 9, sub_8129F24}, + {10, sub_8129FCC}, + {11, sub_812A074}, + {12, sub_812A0B0}, + { 2, sub_812A18C}, + {13, sub_812A1B8}, + {18, sub_812A1FC}, + {19, sub_812A240}, + {14, sub_812A294}, + {15, sub_812A2E4}, + {16, sub_812A334}, + {17, sub_812A378}, + {20, sub_812A3D0} +}; + +bool8 sub_8129B14(void) +{ + gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4)); + if (gUnknown_203B0E4 && sub_812AE70()) + { + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84)); + InitWindows(gUnknown_845AA94); + ResetTempTileDataBuffers(); + sub_812AD50(); + sub_8129BB8(gUnknown_203B0E4); + sub_8129BC4(); + sub_8129C34(0, 0); + return TRUE; + } + else + { + return FALSE; + } +} + +bool32 sub_8129B78(void) +{ + return sub_8129C8C(0); +} + +void sub_8129B88(void) +{ + sub_812AEB0(); + if (gUnknown_203B0E4) + FREE_AND_SET_NULL(gUnknown_203B0E4); + + FreeAllWindowBuffers(); + gScanlineEffect.state = 3; +} + +void sub_8129BB8(struct UnionRoomChat2 *arg0) +{ + arg0->unk18 = 0xFF; + arg0->unk1E = 0xFF; + arg0->unk1A = 0; +} + +void sub_8129BC4(void) +{ + int i; + + if (!gUnknown_203B0E4) + return; + + for (i = 0; i < 3; i++) + { + gUnknown_203B0E4->unk0[i].unk0 = sub_812A420; + gUnknown_203B0E4->unk0[i].unk4 = 0; + gUnknown_203B0E4->unk0[i].unk5 = 0; + } +} + +void sub_8129BFC(void) +{ + int i; + + if (gUnknown_203B0E4 == NULL) + return; + + for (i = 0; i < 3; i++) + { + if (gUnknown_203B0E4->unk0[i].unk4) + gUnknown_203B0E4->unk0[i].unk4 = gUnknown_203B0E4->unk0[i].unk0(&gUnknown_203B0E4->unk0[i].unk5); + } +} + +void sub_8129C34(u16 arg0, u8 arg1) +{ + int i; + + gUnknown_203B0E4->unk0[arg1].unk0 = sub_812A420; + for (i = 0; i < NELEMS(gUnknown_845AABC); i++) + { + if (gUnknown_845AABC[i].unk0 == arg0) + { + gUnknown_203B0E4->unk0[arg1].unk0 = gUnknown_845AABC[i].unk4; + gUnknown_203B0E4->unk0[arg1].unk4 = 1; + gUnknown_203B0E4->unk0[arg1].unk5 = 0; + break; + } + } +} + +bool8 sub_8129C8C(u8 arg0) +{ + return gUnknown_203B0E4->unk0[arg0].unk4; +} + +bool32 sub_8129CA0(u8 *state) +{ + if (FreeTempTileDataBuffersIfPossible() == TRUE) + return TRUE; + + switch (*state) + { + case 0: + sub_812AAD4(); + sub_812AB8C(); + break; + case 1: + sub_812ABD8(); + break; + case 2: + sub_812AC08(); + break; + case 3: + sub_812AC58(); + break; + case 4: + sub_812AC9C(); + break; + case 5: + sub_812ACC0(); + sub_812ACEC(); + sub_812AD20(); + sub_812AD04(); + break; + case 6: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_812AEC8(); + sub_812B048(); + sub_812B100(); + } + break; + default: + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129D40(u8 *state) +{ + switch (*state) + { + case 0: + sub_812AA10(); + CopyWindowToVram(3, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129D78(u8 *state) +{ + switch (*state) + { + case 0: + sub_812AA64(); + CopyWindowToVram(3, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129DB0(u8 *state) +{ + switch (*state) + { + case 0: + sub_812AEFC(TRUE); + if (sub_812A980()) + return TRUE; + + sub_812A804(); + CopyWindowToVram(2, 2); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + break; + case 2: + if (sub_812A9C8()) + return TRUE; + + sub_812AF1C(); + sub_812AEFC(FALSE); + sub_812B160(); + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129E1C(u8 *state) +{ + sub_812AF1C(); + return FALSE; +} + +bool32 sub_8129E28(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(0, 0); + sub_812A424(23, 11, 1); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129E74(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A6F4(); + sub_812A51C(); + CopyBgTilemapBufferToVram(0); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + sub_812A728(); + sub_812A544(); + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129EB8(u8 *state) +{ + u32 var0, var1; + u8 *str; + + switch (*state) + { + case 0: + sub_8129730(&var0, &var1); + sub_812A74C(var0, var1, 0); + str = sub_8129714(); + sub_812A778(0, str, 3, 1, 2); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_812B160(); + return FALSE; + } + return TRUE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129F24(u8 *state) +{ + u16 var0; + u8 *str; + u16 length; + + switch (*state) + { + case 0: + var0 = sub_8129788(); + str = sub_8129758(); + length = StringLength_Multibyte(str); + sub_812A74C(var0, length, PIXEL_FILL(6)); + sub_812A778(var0, str, 0, 4, 5); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_812A578(1, 16); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + } + else + { + return TRUE; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + sub_812AF8C(1); + else + return TRUE; + break; + case 3: + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_8129FCC(u8 *state) +{ + u16 var0; + u8 *str; + u16 length; + + switch (*state) + { + case 0: + var0 = sub_8129788(); + str = sub_8129758(); + length = StringLength_Multibyte(str); + sub_812A74C(var0, length, PIXEL_FILL(0)); + sub_812A778(var0, str, 3, 1, 2); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_812A6F4(); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + } + else + { + return TRUE; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_812AF8C(0); + sub_812A728(); + } + else + { + return TRUE; + } + break; + case 3: + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_812A074(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A804(); + CopyWindowToVram(2, 2); + (*state)++; + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + else + return FALSE; + } + + return TRUE; +} + +bool32 sub_812A0B0(u8 *state) +{ + u16 var0; + u8 *str; + u8 var1; + + switch (*state) + { + case 0: + var0 = gUnknown_203B0E4->unk1A; + str = sub_81297C4(); + var1 = sub_81297D0(); + sub_812AA78(var0, str, var1); + CopyWindowToVram(0, 2); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + if (gUnknown_203B0E4->unk1A < 9) + { + gUnknown_203B0E4->unk1A++; + *state = 4; + return FALSE; + } + else + { + gUnknown_203B0E4->unk1C = 0; + (*state)++; + } + // fall through + case 2: + ScrollWindow(0, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(0, 2); + gUnknown_203B0E4->unk1C++; + (*state)++; + // fall through + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + if (gUnknown_203B0E4->unk1C < 3) + { + (*state)--; + return TRUE; + } + break; + case 4: + return FALSE; + default: + return TRUE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_812A18C(u8 *state) +{ + switch (*state) + { + case 0: + sub_812AFC0(); + (*state)++; + break; + case 1: + return sub_812AFFC(); + } + + return TRUE; +} + +bool32 sub_812A1B8(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(3, 16); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} From c0b05784d64a6fce12eb25c7e40e401a59593e68 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 13:35:34 -0500 Subject: [PATCH 07/11] Finish union_room_chat_display --- asm/union_room_chat.s | 1595 --------------------------------- data/graphics.s | 6 +- data/strings.s | 34 +- data/union_room_chat.s | 46 - include/graphics.h | 8 + include/strings.h | 35 +- include/text_window.h | 1 + include/trade.h | 4 + include/union_room_chat.h | 14 + src/daycare.c | 28 +- src/trade.c | 25 +- src/union_room_chat.c | 15 +- src/union_room_chat_display.c | 572 ++++++++++++ 13 files changed, 654 insertions(+), 1729 deletions(-) diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 7a9d41ef3..1045cea43 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5,1601 +5,6 @@ .text - thumb_func_start sub_812A1FC -sub_812A1FC: @ 812A1FC - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A20C - cmp r0, 0x1 - beq _0812A22C - b _0812A236 -_0812A20C: - movs r0, 0x4 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A228 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A236 - .align 2, 0 -_0812A228: .4byte gUnknown_203B0E4 -_0812A22C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A238 -_0812A236: - movs r0, 0x1 -_0812A238: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A1FC - - thumb_func_start sub_812A240 -sub_812A240: @ 812A240 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A250 - cmp r0, 0x1 - beq _0812A280 - b _0812A28A -_0812A250: - bl DynamicPlaceholderTextUtil_Reset - bl sub_8129814 - adds r1, r0, 0 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - movs r0, 0x5 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A27C @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A28A - .align 2, 0 -_0812A27C: .4byte gUnknown_203B0E4 -_0812A280: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A28C -_0812A28A: - movs r0, 0x1 -_0812A28C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A240 - - thumb_func_start sub_812A294 -sub_812A294: @ 812A294 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A2A4 - cmp r0, 0x1 - beq _0812A2D0 - b _0812A2DA -_0812A2A4: - movs r0, 0x6 - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1 - bl sub_812A424 - ldr r0, _0812A2CC @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A2DA - .align 2, 0 -_0812A2CC: .4byte gUnknown_203B0E4 -_0812A2D0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A2DC -_0812A2DA: - movs r0, 0x1 -_0812A2DC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A294 - - thumb_func_start sub_812A2E4 -sub_812A2E4: @ 812A2E4 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A2F4 - cmp r0, 0x1 - beq _0812A320 - b _0812A32A -_0812A2F4: - movs r0, 0x7 - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1 - bl sub_812A424 - ldr r0, _0812A31C @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A32A - .align 2, 0 -_0812A31C: .4byte gUnknown_203B0E4 -_0812A320: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A32C -_0812A32A: - movs r0, 0x1 -_0812A32C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A2E4 - - thumb_func_start sub_812A334 -sub_812A334: @ 812A334 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A344 - cmp r0, 0x1 - beq _0812A364 - b _0812A36E -_0812A344: - movs r0, 0x8 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A360 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A36E - .align 2, 0 -_0812A360: .4byte gUnknown_203B0E4 -_0812A364: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A370 -_0812A36E: - movs r0, 0x1 -_0812A370: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A334 - - thumb_func_start sub_812A378 -sub_812A378: @ 812A378 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A388 - cmp r0, 0x1 - beq _0812A3BC - b _0812A3C6 -_0812A388: - bl DynamicPlaceholderTextUtil_Reset - ldr r0, _0812A3B4 @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - movs r0, 0x9 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A3B8 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A3C6 - .align 2, 0 -_0812A3B4: .4byte gSaveBlock2Ptr -_0812A3B8: .4byte gUnknown_203B0E4 -_0812A3BC: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A3C8 -_0812A3C6: - movs r0, 0x1 -_0812A3C8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A378 - - thumb_func_start sub_812A3D0 -sub_812A3D0: @ 812A3D0 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A3E0 - cmp r0, 0x1 - beq _0812A40C - b _0812A416 -_0812A3E0: - movs r0, 0xA - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1 - bl sub_812A424 - ldr r0, _0812A408 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A416 - .align 2, 0 -_0812A408: .4byte gUnknown_203B0E4 -_0812A40C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A418 -_0812A416: - movs r0, 0x1 -_0812A418: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A3D0 - - thumb_func_start sub_812A420 -sub_812A420: @ 812A420 - movs r0, 0 - bx lr - thumb_func_end sub_812A420 - - thumb_func_start sub_812A424 -sub_812A424: @ 812A424 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r4, _0812A4FC @ =0xffffff00 - ldr r2, [sp, 0xC] - ands r2, r4 - lsrs r0, 16 - ldr r3, _0812A500 @ =0xffff00ff - ands r2, r3 - orrs r2, r0 - lsrs r1, 8 - ldr r0, _0812A504 @ =0xff00ffff - ands r2, r0 - orrs r2, r1 - ldr r0, _0812A508 @ =0x00ffffff - ands r2, r0 - movs r0, 0xC0 - lsls r0, 19 - orrs r2, r0 - str r2, [sp, 0xC] - ldr r0, [sp, 0x10] - ands r0, r4 - movs r1, 0x4 - orrs r0, r1 - ands r0, r3 - movs r1, 0xE0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _0812A50C @ =0x0000ffff - ands r0, r1 - movs r1, 0xA4 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x10] - add r0, sp, 0xC - bl AddWindow - adds r1, r0, 0 - ldr r6, _0812A510 @ =gUnknown_203B0E4 - ldr r0, [r6] - movs r7, 0 - strh r1, [r0, 0x18] - lsls r0, r1, 16 - lsrs r0, 16 - cmp r0, 0xFF - beq _0812A4F0 - lsls r0, r1, 24 - lsrs r0, 24 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r6] - ldrb r0, [r0, 0x18] - bl PutWindowTilemap - ldr r0, [r6] - ldrb r0, [r0, 0x18] - ldr r2, _0812A514 @ =gText_Yes - movs r5, 0x2 - str r5, [sp] - movs r4, 0xFF - str r4, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r6] - ldrb r0, [r0, 0x18] - ldr r2, _0812A518 @ =gText_No - movs r1, 0x10 - str r1, [sp] - str r4, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r6] - ldrb r0, [r0, 0x18] - movs r1, 0x1 - movs r2, 0xD - bl DrawTextBorderOuter - ldr r0, [r6] - ldrb r0, [r0, 0x18] - movs r1, 0xE - str r1, [sp] - str r5, [sp, 0x4] - mov r1, r8 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor -_0812A4F0: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812A4FC: .4byte 0xffffff00 -_0812A500: .4byte 0xffff00ff -_0812A504: .4byte 0xff00ffff -_0812A508: .4byte 0x00ffffff -_0812A50C: .4byte 0x0000ffff -_0812A510: .4byte gUnknown_203B0E4 -_0812A514: .4byte gText_Yes -_0812A518: .4byte gText_No - thumb_func_end sub_812A424 - - thumb_func_start sub_812A51C -sub_812A51C: @ 812A51C - push {r4,lr} - ldr r4, _0812A540 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x18] - cmp r0, 0xFF - beq _0812A53A - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldr r0, [r4] - ldrb r0, [r0, 0x18] - bl ClearWindowTilemap -_0812A53A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A540: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A51C - - thumb_func_start sub_812A544 -sub_812A544: @ 812A544 - push {r4,lr} - ldr r4, _0812A564 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x18] - cmp r0, 0xFF - beq _0812A55E - lsls r0, 24 - lsrs r0, 24 - bl RemoveWindow - ldr r1, [r4] - movs r0, 0xFF - strh r0, [r1, 0x18] -_0812A55E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A564: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A544 - - thumb_func_start sub_812A568 -sub_812A568: @ 812A568 - push {lr} - bl Menu_ProcessInput - lsls r0, 24 - asrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_812A568 - - thumb_func_start sub_812A578 -sub_812A578: @ 812A578 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x1C - adds r7, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - ldr r1, _0812A624 @ =0xffffff00 - ldr r3, [sp, 0x14] - ands r3, r1 - ldr r2, _0812A628 @ =0xffff00ff - ands r3, r2 - movs r0, 0x80 - lsls r0, 4 - orrs r3, r0 - ldr r0, _0812A62C @ =0xff00ffff - ands r3, r0 - movs r0, 0x80 - lsls r0, 13 - orrs r3, r0 - ldr r5, _0812A630 @ =0x00ffffff - ands r3, r5 - movs r0, 0xA8 - lsls r0, 21 - orrs r3, r0 - str r3, [sp, 0x14] - ldr r0, [sp, 0x18] - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - ands r0, r2 - movs r1, 0xE0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _0812A634 @ =0x0000ffff - ands r0, r1 - movs r1, 0xD4 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x18] - ldr r1, _0812A638 @ =gUnknown_845AB64 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - adds r4, r0, r1 - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _0812A5F8 - lsls r0, r3, 16 - movs r1, 0xF9 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - ands r2, r3 - orrs r2, r0 - lsrs r1, r2, 24 - adds r1, 0x7 - lsls r1, 24 - adds r0, r5, 0 - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x14] -_0812A5F8: - add r0, sp, 0x14 - bl AddWindow - ldr r5, _0812A63C @ =gUnknown_203B0E4 - ldr r1, [r5] - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x1E] - mov r8, r0 - cmp r0, 0xFF - beq _0812A6E2 - ldrb r0, [r4, 0x9] - cmp r0, 0 - beq _0812A640 - adds r0, r1, 0 - adds r0, 0x22 - ldr r1, [r4] - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - ldr r0, [r5] - adds r6, r0, 0 - adds r6, 0x22 - b _0812A642 - .align 2, 0 -_0812A624: .4byte 0xffffff00 -_0812A628: .4byte 0xffff00ff -_0812A62C: .4byte 0xff00ffff -_0812A630: .4byte 0x00ffffff -_0812A634: .4byte 0x0000ffff -_0812A638: .4byte gUnknown_845AB64 -_0812A63C: .4byte gUnknown_203B0E4 -_0812A640: - ldr r6, [r4] -_0812A642: - mov r0, r9 - lsls r1, r0, 8 - movs r0, 0 - movs r2, 0 - bl ChangeBgY - mov r1, r8 - lsls r0, r1, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - adds r0, r5, 0 - bl PutWindowTilemap - ldr r1, _0812A6AC @ =gUnknown_845AB64 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - cmp r0, 0x1 - bne _0812A6B0 - adds r0, r5, 0 - movs r1, 0xA - movs r2, 0x2 - bl DrawTextBorderInner - ldrb r3, [r4, 0x5] - adds r3, 0x8 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4, 0x6] - adds r0, 0x8 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - ldrb r0, [r4, 0x7] - str r0, [sp, 0xC] - ldrb r0, [r4, 0x8] - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r6, 0 - bl AddTextPrinterParameterized5 - b _0812A6DA - .align 2, 0 -_0812A6AC: .4byte gUnknown_845AB64 -_0812A6B0: - adds r0, r5, 0 - movs r1, 0xA - movs r2, 0x2 - bl DrawTextBorderOuter - ldrb r3, [r4, 0x5] - ldrb r0, [r4, 0x6] - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - ldrb r0, [r4, 0x7] - str r0, [sp, 0xC] - ldrb r0, [r4, 0x8] - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r6, 0 - bl AddTextPrinterParameterized5 -_0812A6DA: - ldr r0, _0812A6F0 @ =gUnknown_203B0E4 - ldr r0, [r0] - mov r1, r8 - strh r1, [r0, 0x1E] -_0812A6E2: - add sp, 0x1C - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812A6F0: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A578 - - thumb_func_start sub_812A6F4 -sub_812A6F4: @ 812A6F4 - push {r4,lr} - ldr r4, _0812A724 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x1E] - cmp r0, 0xFF - beq _0812A712 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldr r0, [r4] - ldrb r0, [r0, 0x1E] - bl ClearWindowTilemap -_0812A712: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A724: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A6F4 - - thumb_func_start sub_812A728 -sub_812A728: @ 812A728 - push {r4,lr} - ldr r4, _0812A748 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x1E] - cmp r0, 0xFF - beq _0812A742 - lsls r0, 24 - lsrs r0, 24 - bl RemoveWindow - ldr r1, [r4] - movs r0, 0xFF - strh r0, [r1, 0x1E] -_0812A742: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A748: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A728 - - thumb_func_start sub_812A74C -sub_812A74C: @ 812A74C - push {lr} - sub sp, 0x8 - adds r3, r0, 0 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 19 - lsrs r3, 16 - lsls r1, 19 - lsrs r1, 16 - str r1, [sp] - movs r0, 0xE - str r0, [sp, 0x4] - movs r0, 0x1 - adds r1, r2, 0 - adds r2, r3, 0 - movs r3, 0x1 - bl FillWindowPixelRect - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_812A74C - - thumb_func_start sub_812A778 -sub_812A778: @ 812A778 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x34 - mov r10, r1 - ldr r1, [sp, 0x54] - lsls r0, 16 - lsrs r5, r0, 16 - mov r9, r5 - lsls r2, 24 - lsrs r4, r2, 24 - mov r8, r4 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r4, 0 - beq _0812A7B4 - bl sub_81297DC - adds r1, r0, 0 - subs r1, r5 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - adds r2, r4, 0 - bl sub_812A74C -_0812A7B4: - add r0, sp, 0xC - mov r1, r8 - strb r1, [r0] - strb r7, [r0, 0x1] - strb r6, [r0, 0x2] - add r4, sp, 0x10 - movs r0, 0xFC - strb r0, [r4] - movs r0, 0x14 - strb r0, [r4, 0x1] - movs r0, 0x8 - strb r0, [r4, 0x2] - mov r0, sp - adds r0, 0x13 - mov r1, r10 - bl StringCopy - mov r0, r9 - lsls r2, r0, 27 - lsrs r2, 24 - add r1, sp, 0xC - str r1, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0x34 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_812A778 - - thumb_func_start sub_812A804 -sub_812A804: @ 812A804 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4C - movs r0, 0x2 - movs r1, 0xFF - bl FillWindowPixelBuffer - bl GetCurrentKeyboardPage - lsls r0, 24 - lsrs r2, r0, 24 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - movs r0, 0xE - strb r0, [r1, 0x1] - movs r0, 0xD - strb r0, [r1, 0x2] - cmp r2, 0x3 - beq _0812A8A0 - add r1, sp, 0x10 - movs r0, 0xFC - strb r0, [r1] - movs r0, 0x14 - strb r0, [r1, 0x1] - movs r0, 0x8 - strb r0, [r1, 0x2] - str r0, [sp, 0x40] - str r1, [sp, 0x44] - cmp r2, 0x2 - bne _0812A84C - movs r1, 0x6 - str r1, [sp, 0x40] -_0812A84C: - movs r7, 0 - movs r6, 0 - lsls r0, r2, 2 - ldr r1, _0812A89C @ =sUnionRoomKeyboardText - adds r0, r2 - lsls r0, 3 - adds r4, r0, r1 - ldr r0, [sp, 0x40] - lsls r5, r0, 24 -_0812A85E: - ldr r1, [r4] - cmp r1, 0 - bne _0812A866 - b _0812A96C -_0812A866: - mov r0, sp - adds r0, 0x13 - bl StringCopy - lsls r3, r6, 24 - lsrs r3, 24 - add r1, sp, 0xC - str r1, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r0, [sp, 0x44] - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - lsrs r2, r5, 24 - bl AddTextPrinterParameterized3 - adds r4, 0x4 - adds r7, 0x1 - adds r0, r6, 0 - adds r0, 0xC - lsls r0, 16 - lsrs r6, r0, 16 - cmp r7, 0x9 - ble _0812A85E - b _0812A96C - .align 2, 0 -_0812A89C: .4byte sUnionRoomKeyboardText -_0812A8A0: - movs r1, 0x4 - str r1, [sp, 0x40] - movs r7, 0 - movs r6, 0 -_0812A8A8: - adds r0, r7, 0 - bl sub_81294B0 - adds r5, r0, 0 - movs r0, 0 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - cmp r0, 0x28 - bgt _0812A8E6 - lsls r3, r6, 24 - lsrs r3, 24 - add r4, sp, 0xC - str r4, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r4, 0x80 - lsls r4, 19 - lsrs r2, r4, 24 - bl AddTextPrinterParameterized3 - adds r0, r7, 0x1 - str r0, [sp, 0x48] - adds r6, 0xC - mov r10, r6 - b _0812A960 -_0812A8E6: - adds r0, r5, 0 - bl StringLength_Multibyte - adds r4, r0, 0 - mov r1, sp - adds r1, 0x10 - str r1, [sp, 0x44] - ldr r0, [sp, 0x40] - lsls r0, 24 - mov r8, r0 - lsls r1, r6, 24 - mov r9, r1 - adds r0, r7, 0x1 - str r0, [sp, 0x48] - adds r6, 0xC - mov r10, r6 - ldr r7, [sp, 0x40] - adds r7, 0x23 - ldr r6, [sp, 0x44] -_0812A90C: - subs r4, 0x1 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl StringCopyN_Multibyte - movs r0, 0 - adds r1, r6, 0 - movs r2, 0 - bl GetStringWidth - cmp r0, 0x23 - bgt _0812A90C - mov r1, r8 - lsrs r2, r1, 24 - mov r0, r9 - lsrs r4, r0, 24 - add r1, sp, 0xC - str r1, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r1, [sp, 0x44] - str r1, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - adds r3, r4, 0 - bl AddTextPrinterParameterized3 - adds r2, r7, 0 - add r0, sp, 0xC - str r0, [sp] - movs r1, 0x1 - negs r1, r1 - str r1, [sp, 0x4] - ldr r0, _0812A97C @ =gUnknown_845ABE8 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - adds r3, r4, 0 - bl AddTextPrinterParameterized3 -_0812A960: - ldr r7, [sp, 0x48] - mov r4, r10 - lsls r0, r4, 16 - lsrs r6, r0, 16 - cmp r7, 0x9 - ble _0812A8A8 -_0812A96C: - add sp, 0x4C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812A97C: .4byte gUnknown_845ABE8 - thumb_func_end sub_812A804 - - thumb_func_start sub_812A980 -sub_812A980: @ 812A980 - push {r4,lr} - ldr r1, _0812A9A4 @ =gUnknown_203B0E4 - ldr r2, [r1] - ldrh r3, [r2, 0x20] - movs r4, 0x20 - ldrsh r0, [r2, r4] - cmp r0, 0x37 - bgt _0812A9B4 - adds r0, r3, 0 - adds r0, 0xC - strh r0, [r2, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x37 - ble _0812A9A8 - movs r0, 0x38 - strh r0, [r2, 0x20] - b _0812A9B4 - .align 2, 0 -_0812A9A4: .4byte gUnknown_203B0E4 -_0812A9A8: - movs r1, 0x20 - ldrsh r0, [r2, r1] - bl sub_812ADA0 - movs r0, 0x1 - b _0812A9C0 -_0812A9B4: - ldr r0, [r1] - movs r4, 0x20 - ldrsh r0, [r0, r4] - bl sub_812ADF8 - movs r0, 0 -_0812A9C0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A980 - - thumb_func_start sub_812A9C8 -sub_812A9C8: @ 812A9C8 - push {r4,lr} - ldr r1, _0812A9EC @ =gUnknown_203B0E4 - ldr r2, [r1] - ldrh r3, [r2, 0x20] - movs r4, 0x20 - ldrsh r0, [r2, r4] - cmp r0, 0 - ble _0812A9FC - adds r0, r3, 0 - subs r0, 0xC - strh r0, [r2, 0x20] - lsls r0, 16 - cmp r0, 0 - bgt _0812A9F0 - movs r0, 0 - strh r0, [r2, 0x20] - b _0812A9FC - .align 2, 0 -_0812A9EC: .4byte gUnknown_203B0E4 -_0812A9F0: - movs r1, 0x20 - ldrsh r0, [r2, r1] - bl sub_812ADA0 - movs r0, 0x1 - b _0812AA08 -_0812A9FC: - ldr r0, [r1] - movs r4, 0x20 - ldrsh r0, [r0, r4] - bl sub_812ADF8 - movs r0, 0 -_0812AA08: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A9C8 - - thumb_func_start sub_812AA10 -sub_812AA10: @ 812AA10 - push {lr} - sub sp, 0xC - movs r0, 0x3 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0xD - bl DrawTextBorderOuter - ldr r0, _0812AA60 @ =gUnknown_845ABEC - str r0, [sp] - movs r0, 0x3 - movs r1, 0x2 - movs r2, 0xE - movs r3, 0x5 - bl UnionRoomAndTradeMenuPrintOptions - bl GetCurrentKeyboardPage - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xE - str r1, [sp] - movs r1, 0x5 - str r1, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0x3 - movs r1, 0x2 - movs r2, 0 - movs r3, 0 - bl Menu_InitCursor - movs r0, 0x3 - bl PutWindowTilemap - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_0812AA60: .4byte gUnknown_845ABEC - thumb_func_end sub_812AA10 - - thumb_func_start sub_812AA64 -sub_812AA64: @ 812AA64 - push {lr} - movs r0, 0x3 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x3 - bl ClearWindowTilemap - pop {r0} - bx r0 - thumb_func_end sub_812AA64 - - thumb_func_start sub_812AA78 -sub_812AA78: @ 812AA78 - push {r4,r5,lr} - sub sp, 0x10 - adds r5, r1, 0 - lsls r0, 16 - lsrs r0, 16 - lsls r2, 24 - add r3, sp, 0xC - movs r1, 0x1 - strb r1, [r3] - lsrs r2, 23 - adds r1, r2, 0x2 - strb r1, [r3, 0x1] - adds r1, r3, 0 - adds r2, 0x3 - strb r2, [r1, 0x2] - lsls r4, r0, 4 - subs r4, r0 - lsls r3, r4, 16 - lsrs r3, 16 - movs r0, 0xA8 - str r0, [sp] - movs r0, 0xF - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x11 - movs r2, 0 - bl FillWindowPixelRect - lsls r4, 24 - lsrs r4, 24 - add r0, sp, 0xC - str r0, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - adds r3, r4, 0 - bl AddTextPrinterParameterized3 - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_812AA78 - - thumb_func_start sub_812AAD4 -sub_812AAD4: @ 812AAD4 - push {lr} - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - 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, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r1, 0xE0 - lsls r1, 8 - movs r0, 0 - bl ClearGpuRegBits - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _0812AB88 @ =0x000040f0 - movs r0, 0x40 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0x90 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x3D - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3F - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_0812AB88: .4byte 0x000040f0 - thumb_func_end sub_812AAD4 - - thumb_func_start sub_812AB8C -sub_812AB8C: @ 812AB8C - push {r4,lr} - ldr r4, _0812ABC8 @ =gUnknown_203B0E4 - ldr r1, [r4] - movs r0, 0x94 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0812ABCC @ =0x00000928 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0812ABD0 @ =0x00001128 - adds r1, r0 - movs r0, 0x3 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0812ABD4 @ =0x00001928 - adds r1, r0 - movs r0, 0x2 - bl SetBgTilemapBuffer - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812ABC8: .4byte gUnknown_203B0E4 -_0812ABCC: .4byte 0x00000928 -_0812ABD0: .4byte 0x00001128 -_0812ABD4: .4byte 0x00001928 - thumb_func_end sub_812AB8C - - thumb_func_start sub_812ABD8 -sub_812ABD8: @ 812ABD8 - push {lr} - sub sp, 0x8 - movs r1, 0xC0 - lsls r1, 19 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_812ABD8 - - thumb_func_start sub_812AC08 -sub_812AC08: @ 812AC08 - push {lr} - sub sp, 0x4 - ldr r0, _0812AC48 @ =gUnknown_8EAA9F0 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette - ldr r0, _0812AC4C @ =gUnknown_845AA24 - movs r1, 0xC0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812AC50 @ =gUnknown_8EAAA10 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _0812AC54 @ =gUnknown_8EAAA6C - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0812AC48: .4byte gUnknown_8EAA9F0 -_0812AC4C: .4byte gUnknown_845AA24 -_0812AC50: .4byte gUnknown_8EAAA10 -_0812AC54: .4byte gUnknown_8EAAA6C - thumb_func_end sub_812AC08 - - thumb_func_start sub_812AC58 -sub_812AC58: @ 812AC58 - push {lr} - sub sp, 0x4 - ldr r0, _0812AC90 @ =gUnknown_8EA1700 - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812AC94 @ =gUnknown_8EA1720 - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _0812AC98 @ =gUnknown_8EA1958 - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0812AC90: .4byte gUnknown_8EA1700 -_0812AC94: .4byte gUnknown_8EA1720 -_0812AC98: .4byte gUnknown_8EA1958 - thumb_func_end sub_812AC58 - - thumb_func_start sub_812AC9C -sub_812AC9C: @ 812AC9C - push {lr} - ldr r0, _0812ACB8 @ =gUnknown_845AA44 - movs r1, 0x80 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812ACBC @ =0x06004020 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - pop {r0} - bx r0 - .align 2, 0 -_0812ACB8: .4byte gUnknown_845AA44 -_0812ACBC: .4byte 0x06004020 - thumb_func_end sub_812AC9C - - thumb_func_start sub_812ACC0 -sub_812ACC0: @ 812ACC0 - push {lr} - ldr r0, _0812ACE8 @ =gUnknown_845AA64 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - .align 2, 0 -_0812ACE8: .4byte gUnknown_845AA64 - thumb_func_end sub_812ACC0 - - thumb_func_start sub_812ACEC -sub_812ACEC: @ 812ACEC - push {lr} - movs r0, 0x2 - bl PutWindowTilemap - bl sub_812A804 - movs r0, 0x2 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_812ACEC - - thumb_func_start sub_812AD04 -sub_812AD04: @ 812AD04 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_812AD04 - - thumb_func_start sub_812AD20 -sub_812AD20: @ 812AD20 - push {lr} - movs r0, 0x3 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0xD0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0x3 - movs r1, 0xA - movs r2, 0x20 - bl TextWindow_SetStdFrame0_WithPal - ldr r0, _0812AD4C @ =gTMCaseMainWindowPalette - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - pop {r0} - bx r0 - .align 2, 0 -_0812AD4C: .4byte gTMCaseMainWindowPalette - thumb_func_end sub_812AD20 - - thumb_func_start sub_812AD50 -sub_812AD50: @ 812AD50 - push {lr} - sub sp, 0x10 - ldr r0, _0812AD8C @ =0xa2600001 - str r0, [sp, 0x4] - ldr r0, _0812AD90 @ =0x04000014 - str r0, [sp] - mov r2, sp - movs r1, 0 - movs r0, 0x1 - strb r0, [r2, 0x8] - mov r0, sp - strb r1, [r0, 0x9] - ldr r0, _0812AD94 @ =gUnknown_203B0E4 - ldr r0, [r0] - strh r1, [r0, 0x20] - str r1, [sp, 0xC] - add r0, sp, 0xC - ldr r1, _0812AD98 @ =gScanlineEffectRegBuffers - ldr r2, _0812AD9C @ =0x010003c0 - bl CpuFastSet - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0812AD8C: .4byte 0xa2600001 -_0812AD90: .4byte 0x04000014 -_0812AD94: .4byte gUnknown_203B0E4 -_0812AD98: .4byte gScanlineEffectRegBuffers -_0812AD9C: .4byte 0x010003c0 - thumb_func_end sub_812AD50 - - thumb_func_start sub_812ADA0 -sub_812ADA0: @ 812ADA0 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r0, 16 - mov r1, sp - strh r0, [r1] - ldr r5, _0812ADE8 @ =gScanlineEffect - ldrb r0, [r5, 0x14] - lsls r1, r0, 4 - subs r1, r0 - lsls r1, 7 - ldr r4, _0812ADEC @ =gScanlineEffectRegBuffers - adds r1, r4 - ldr r2, _0812ADF0 @ =0x01000090 - mov r0, sp - bl CpuSet - mov r0, sp - adds r0, 0x2 - movs r1, 0 - strh r1, [r0] - ldrb r2, [r5, 0x14] - lsls r1, r2, 4 - subs r1, r2 - lsls r1, 7 - movs r2, 0x90 - lsls r2, 1 - adds r4, r2 - adds r1, r4 - ldr r2, _0812ADF4 @ =0x01000010 - bl CpuSet - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812ADE8: .4byte gScanlineEffect -_0812ADEC: .4byte gScanlineEffectRegBuffers -_0812ADF0: .4byte 0x01000090 -_0812ADF4: .4byte 0x01000010 - thumb_func_end sub_812ADA0 - - thumb_func_start sub_812ADF8 -sub_812ADF8: @ 812ADF8 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, sp - strh r4, [r0] - ldr r5, _0812AE64 @ =gScanlineEffectRegBuffers - ldr r0, _0812AE68 @ =0x01000090 - mov r9, r0 - mov r0, sp - adds r1, r5, 0 - mov r2, r9 - bl CpuSet - mov r0, sp - adds r0, 0x2 - movs r6, 0 - strh r6, [r0] - movs r2, 0x90 - lsls r2, 1 - adds r1, r5, r2 - ldr r2, _0812AE6C @ =0x01000010 - mov r8, r2 - bl CpuSet - add r0, sp, 0x4 - strh r4, [r0] - movs r2, 0xF0 - lsls r2, 3 - adds r1, r5, r2 - mov r2, r9 - bl CpuSet - mov r0, sp - adds r0, 0x6 - strh r6, [r0] - movs r1, 0x8A - lsls r1, 4 - adds r5, r1 - adds r1, r5, 0 - mov r2, r8 - bl CpuSet - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812AE64: .4byte gScanlineEffectRegBuffers -_0812AE68: .4byte 0x01000090 -_0812AE6C: .4byte 0x01000010 - thumb_func_end sub_812ADF8 - thumb_func_start sub_812AE70 sub_812AE70: @ 812AE70 push {r4,r5,lr} diff --git a/data/graphics.s b/data/graphics.s index 809385e49..cbc66ad4d 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16374,13 +16374,13 @@ gFameCheckerBg3Tilemap:: @ 8EA0700 gFameCheckerBg2Tilemap:: @ 8EA0F00 .incbin "data/graphics/fame_checker_tilemap2.bin" -gUnknown_8EA1700:: @ 8EA1700 +gLinkMiscMenu_Pal:: @ 8EA1700 .incbin "graphics/interface/union_room_chat.gbapal" -gUnknown_8EA1720:: @ 8EA1720 +gLinkMiscMenu_Gfx:: @ 8EA1720 .incbin "graphics/interface/union_room_chat.4bpp.lz" -gUnknown_8EA1958:: @ 8EA1958 +gLinkMiscMenu_Tilemap:: @ 8EA1958 .incbin "graphics/interface/union_room_chat.bin.lz" gUnknown_8EA1A50:: @ 8EA1A50 diff --git a/data/strings.s b/data/strings.s index 4102d3616..5cff90fcd 100644 --- a/data/strings.s +++ b/data/strings.s @@ -3093,34 +3093,34 @@ gUnknown_841B32E:: @ 841B32E .string "{DYNAMIC 0x00} learned\n" .string "{DYNAMIC 0x01}!$" -gUnknown_841B33D:: @ 0x841B33D +gText_Upper:: @ 0x841B33D .string "UPPER$" -gUnknown_841B343:: @ 0x841B343 +gText_Lower:: @ 0x841B343 .string "lower$" -gUnknown_841B349:: @ 0x841B349 +gText_Others:: @ 0x841B349 .string "OTHERS$" -gUnknown_841B350:: @ 0x841B350 +gText_Symbols:: @ 0x841B350 .string "SYMBOLS$" -gUnknown_841B358:: @ 0x841B358 +gText_Register2:: @ 0x841B358 .string "REGISTER$" -gUnknown_841B361:: @ 0x841B361 +gText_Exit:: @ 0x841B361 .string "EXIT$" -gUnknown_841B366:: @ 0x841B366 +gText_QuitChatting:: @ 0x841B366 .string "Quit chatting?$" -gUnknown_841B375:: @ 0x841B375 +gText_RegisterTextWhere:: @ 0x841B375 .string "Register text where?$" -gUnknown_841B38A:: @ 0x841B38A +gText_RegisterTextHere:: @ 0x841B38A .string "Register text here?$" -gUnknown_841B39E:: @ 0x841B39E +gText_InputText:: @ 0x841B39E .string "Input text.$" gText_F700JoinedChat:: @ 841B3AA @@ -3135,29 +3135,29 @@ gUnknown_841B3D0:: @ 0x841B3D0 gUnknown_841B3DA:: @ 0x841B3DA .string "{DYNAMIC 0x00}の{DYNAMIC 0x01}ひきめは いません$" -gUnknown_841B3E9:: @ 0x841B3E9 +gText_ExitingTheChat:: @ 0x841B3E9 .string "Exiting the chat‥$" -gUnknown_841B3FB:: @ 0x841B3FB +gText_LeaderHasLeftEndingChat:: @ 0x841B3FB .string "The LEADER, {DYNAMIC 0x00}, has\n" .string "left, ending the chat.$" -gUnknown_841B426:: @ 0x841B426 +gText_RegisteredTextChanged_OKtoSave:: @ 0x841B426 .string "The registered text has been changed.\n" .string "Is it okay to save the game?$" -gUnknown_841B469:: @ 0x841B469 +gText_RegisteredTextChanged_AlreadySavedFile:: @ 0x841B469 .string "There is already a saved file.\n" .string "Is it okay to overwrite it?$" -gUnknown_841B4A4:: @ 0x841B4A4 +gText_RegisteredTextChanged_SavingDontTurnOff:: @ 0x841B4A4 .string "SAVING‥\n" .string "DON'T TURN OFF THE POWER.$" -gUnknown_841B4C6:: @ 0x841B4C6 +gText_RegisteredTextChanged_SavedTheGame:: @ 0x841B4C6 .string "{DYNAMIC 0x00} saved the game.$" -gUnknown_841B4D9:: @ 0x841B4D9 +gText_IfLeaderLeavesChatWillEnd:: @ 0x841B4D9 .string "If the LEADER leaves, the chat\n" .string "will end. Is that okay?$" diff --git a/data/union_room_chat.s b/data/union_room_chat.s index d79974946..2873cd4b1 100644 --- a/data/union_room_chat.s +++ b/data/union_room_chat.s @@ -6,52 +6,6 @@ .section .rodata .align 2 -gUnknown_845AB64:: @ 845AB64 - .4byte gUnknown_841B366 - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B375 - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B38A - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B39E - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B3E9 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B3FB - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00 - .align 2 - .4byte gUnknown_841B426 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - .4byte gUnknown_841B469 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - .4byte gUnknown_841B4A4 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - .4byte gUnknown_841B4C6 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x01, 0x01 - .align 2 - .4byte gUnknown_841B4D9 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - -gUnknown_845ABE8:: @ 845ABE8 - .string "…$" - - .align 2 -gUnknown_845ABEC:: @ 845ABEC - .4byte gUnknown_841B33D, 0 - .4byte gUnknown_841B343, 0 - .4byte gUnknown_841B350, 0 - .4byte gUnknown_841B358, 0 - .4byte gUnknown_841B361, 0 - gUnknown_845AC14:: @ 845AC14 .incbin "graphics/union_room_chat/unk_845AC14.gbapal" diff --git a/include/graphics.h b/include/graphics.h index e87acb556..c3620279d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4864,4 +4864,12 @@ extern const u32 gUnknown_8E83444[]; extern const u32 gBagBgPalette[]; extern const u32 gBagBgPalette_FemaleOverride[]; +// union_room_chat_display +extern const u16 gUnknown_8EAA9F0[]; +extern const u32 gUnknown_8EAAA10[]; +extern const u32 gUnknown_8EAAA6C[]; +extern const u16 gLinkMiscMenu_Pal[]; +extern const u32 gLinkMiscMenu_Gfx[]; +extern const u32 gLinkMiscMenu_Tilemap[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index 81cbc63c1..7821825cf 100644 --- a/include/strings.h +++ b/include/strings.h @@ -40,7 +40,6 @@ extern const u8 gText_Second[]; extern const u8 gText_Third[]; extern const u8 gText_NoDecorations[]; extern const u8 gText_NoDecorationsInUse[]; -extern const u8 gText_Exit[]; extern const u8 gText_Cancel[]; extern const u8 gText_Color161Shadow161[]; extern const u8 gText_GoBackPrevMenu[]; @@ -288,7 +287,6 @@ extern const u8 gText_ThreePkmnAreNeeded[]; extern const u8 gText_TwoPokemonAreNeeded[]; extern const u8 gText_PokemonCantBeSame[]; extern const u8 gText_NoIdenticalHoldItems[]; -extern const u8 gString_Dummy[]; extern const u8 gText_DoWhatWithPokemon[]; extern const u8 gText_RestoreWhichMove[]; extern const u8 gText_BoostPp[]; @@ -327,13 +325,9 @@ extern const u8 gText_SendOut[]; extern const u8 gText_Enter[]; extern const u8 gText_NoEntry[]; extern const u8 gText_Store[]; -extern const u8 gText_Register[]; extern const u8 gText_Trade4[]; extern const u8 gText_NotPkmnOtherTrainerWants[]; extern const u8 gText_ThatIsntAnEgg[]; -extern const u8 gText_PkmnCantBeTradedNow[]; -extern const u8 gText_OtherTrainersPkmnCantBeTraded[]; -extern const u8 gText_EggCantBeTradedNow[]; extern const u8 gText_OtherTrainerCantAcceptPkmn[]; extern const u8 gText_CantTradeWithTrainer[]; extern const u8 gUnknown_84176CF[]; @@ -346,7 +340,6 @@ extern const u8 gText_PkmnCantParticipate[]; extern const u8 gText_CancelParticipation[]; extern const u8 gUnknown_8417494[]; extern const u8 gMenuText_Confirm[]; -extern const u8 gText_Lv[]; extern const u8 gText_MaleSymbol[]; extern const u8 gText_FemaleSymbol[]; extern const u8 gText_Slash[]; @@ -984,6 +977,16 @@ extern const u8 gUnknown_8415F6C[]; extern const u8 gUnknown_8415FFF[]; extern const u8 gUnknown_8416002[]; +// daycare +extern const u8 gText_Lv[]; +extern const u8 gDaycareText_GetAlongVeryWell[]; +extern const u8 gDaycareText_GetAlong[]; +extern const u8 gDaycareText_DontLikeOther[]; +extern const u8 gDaycareText_PlayOther[]; +extern const u8 gExpandedPlaceholder_Empty[]; +extern const u8 gText_HatchedFromEgg[]; +extern const u8 gText_NickHatchPrompt[]; + // trainer card extern const u8 gText_WaitingTrainerFinishReading[]; extern const u8 gText_TrainerCardName[]; @@ -1075,4 +1078,22 @@ extern const u8 gText_YaySmileEmoji[]; extern const u8 gText_ThankYou[]; extern const u8 gText_ByeBye[]; +// union_room_chat_display +extern const u8 gText_QuitChatting[]; +extern const u8 gText_RegisterTextWhere[]; +extern const u8 gText_RegisterTextHere[]; +extern const u8 gText_InputText[]; +extern const u8 gText_ExitingTheChat[]; +extern const u8 gText_LeaderHasLeftEndingChat[]; +extern const u8 gText_RegisteredTextChanged_OKtoSave[]; +extern const u8 gText_RegisteredTextChanged_AlreadySavedFile[]; +extern const u8 gText_RegisteredTextChanged_SavingDontTurnOff[]; +extern const u8 gText_RegisteredTextChanged_SavedTheGame[]; +extern const u8 gText_IfLeaderLeavesChatWillEnd[]; +extern const u8 gText_Upper[]; +extern const u8 gText_Lower[]; +extern const u8 gText_Symbols[]; +extern const u8 gText_Register2[]; +extern const u8 gText_Exit[]; + #endif //GUARD_STRINGS_H diff --git a/include/text_window.h b/include/text_window.h index 8e8466145..3796629b4 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -26,6 +26,7 @@ void TextWindow_SetUserSelectedFrame(u8 windowId, u16 tileStart, u8 palette); void LoadUserWindowBorderGfx(u8 windowId, u16 tileStart, u8 palette); void sub_814FDA0(u8 windowId, u16 tileStart, u8 palette); void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette); +void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum); void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset); void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx); void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx); diff --git a/include/trade.h b/include/trade.h index d5106b172..f8e285e40 100644 --- a/include/trade.h +++ b/include/trade.h @@ -8,6 +8,10 @@ extern struct MailStruct gLinkPartnerMail[6]; extern u8 gSelectedTradeMonPositions[2]; +extern const u8 gText_MaleSymbol4[]; +extern const u8 gText_FemaleSymbol4[]; +extern const u8 gText_GenderlessSymbol[]; + extern const u16 gUnknown_826601C[]; void CB2_ReturnFromLinkTrade(void); s32 sub_804FB34(void); diff --git a/include/union_room_chat.h b/include/union_room_chat.h index 3488e71bc..93bd4a55f 100644 --- a/include/union_room_chat.h +++ b/include/union_room_chat.h @@ -1,13 +1,27 @@ #ifndef GUARD_UNION_ROOM_CHAT_H #define GUARD_UNION_ROOM_CHAT_H +enum +{ + UNION_ROOM_KB_PAGE_UPPER, + UNION_ROOM_KB_PAGE_LOWER, + UNION_ROOM_KB_PAGE_EMOJI, + UNION_ROOM_KB_PAGE_COUNT +}; + +extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT]; + void sub_8128420(void); +u8 *sub_81294B0(int arg0); u8 *sub_8129714(void); void sub_8129730(u32 *a0, u32 *a1); u8 *sub_8129758(void); u16 sub_8129788(void); u8 *sub_81297C4(void); u16 sub_81297D0(void); +int sub_81297DC(void); +u8 *sub_8129814(void); void copy_strings_to_sav1(void); +u8 GetCurrentKeyboardPage(void); #endif // GUARD_UNION_ROOM_CHAT_H diff --git a/src/daycare.c b/src/daycare.c index 856a5fbc0..ef9da89fe 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1,44 +1,34 @@ #include "global.h" -#include "pokemon.h" +#include "gflib.h" #include "battle.h" #include "daycare.h" -#include "string_util.h" #include "constants/species.h" #include "constants/items.h" #include "mail_data.h" #include "pokemon_storage_system.h" #include "event_data.h" #include "random.h" -#include "main.h" #include "constants/moves.h" -#include "text.h" #include "menu.h" #include "new_menu_helpers.h" #include "script.h" #include "strings.h" -#include "task.h" -#include "window.h" #include "party_menu.h" #include "list_menu.h" #include "overworld.h" #include "pokedex.h" #include "decompress.h" -#include "palette.h" -#include "sound.h" #include "constants/songs.h" #include "text_window.h" #include "trig.h" -#include "malloc.h" -#include "gpu_regs.h" -#include "bg.h" #include "m4a.h" #include "graphics.h" #include "scanline_effect.h" #include "naming_screen.h" #include "help_system.h" #include "field_fadetransition.h" +#include "trade.h" #include "constants/daycare.h" -#include "constants/pokemon.h" #include "constants/region_map.h" // Combination of RSE's Day-Care (re-used on Four Island), FRLG's Day-Care, and egg_hatch.c @@ -60,20 +50,6 @@ struct EggHatchData u8 textColor[3]; }; -extern const u8 gText_MaleSymbol4[]; -extern const u8 gText_FemaleSymbol4[]; -extern const u8 gText_GenderlessSymbol[]; -extern const u8 gText_Lv[]; -extern const u8 gDaycareText_GetAlongVeryWell[]; -extern const u8 gDaycareText_GetAlong[]; -extern const u8 gDaycareText_DontLikeOther[]; -extern const u8 gDaycareText_PlayOther[]; -extern const u8 gExpandedPlaceholder_Empty[]; - -extern const u32 gUnknown_826601C[]; // tilemap gameboy circle -extern const u8 gText_HatchedFromEgg[]; -extern const u8 gText_NickHatchPrompt[]; - // this file's functions static void ClearDaycareMonMail(struct DayCareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); diff --git a/src/trade.c b/src/trade.c index 05a259e60..fe5f53be9 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1,41 +1,22 @@ #include "global.h" -#include "palette.h" +#include "gflib.h" #include "task.h" #include "decompress.h" -#include "gpu_regs.h" -#include "malloc.h" -#include "bg.h" -#include "text.h" -#include "window.h" -#include "librfu.h" #include "text_window.h" -#include "evolution_scene.h" #include "pokemon_icon.h" -#include "pokedex.h" -#include "mail_data.h" #include "graphics.h" #include "link.h" -#include "random.h" -#include "save.h" #include "load_save.h" -#include "quest_log.h" -#include "field_fadetransition.h" -#include "mevent.h" -#include "help_system.h" #include "link_rfu.h" #include "cable_club.h" #include "data.h" -#include "sound.h" -#include "string_util.h" #include "strings.h" #include "menu.h" #include "overworld.h" #include "battle_anim.h" #include "pokeball.h" #include "party_menu.h" -#include "util.h" #include "daycare.h" -#include "script.h" #include "event_data.h" #include "battle_interface.h" #include "pokemon_summary_screen.h" @@ -43,11 +24,7 @@ #include "new_menu_helpers.h" #include "trade.h" #include "trade_scene.h" -#include "constants/species.h" -#include "constants/items.h" -#include "constants/easy_chat.h" #include "constants/songs.h" -#include "constants/region_map.h" #include "constants/moves.h" struct TradeMenuResources diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 936803f80..f8243f742 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -13,18 +13,11 @@ #include "scanline_effect.h" #include "strings.h" #include "task.h" +#include "union_room_chat.h" #include "union_room_chat_display.h" #include "data_8479668.h" #include "constants/songs.h" -enum -{ - UNION_ROOM_KB_PAGE_UPPER, - UNION_ROOM_KB_PAGE_LOWER, - UNION_ROOM_KB_PAGE_EMOJI, - UNION_ROOM_KB_PAGE_COUNT -}; - struct UnionRoomChat { u8 filler0[0x4]; @@ -147,7 +140,7 @@ const u8 gUnknown_845A8AC[] = { CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE }; -const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { +const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { [UNION_ROOM_KB_PAGE_UPPER] = { gText_UnionRoomChatKeyboard_ABCDE, gText_UnionRoomChatKeyboard_FGHIJ, @@ -951,7 +944,7 @@ void sub_81292D8(void) if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) { - charsStr = sUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow]; + charsStr = gUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow]; for (i = 0; i < gUnknown_203B0E0->unk11; i++) { if (*charsStr == CHAR_EXTRA_EMOJI) @@ -1265,7 +1258,7 @@ u8 *sub_81297C4(void) return gUnknown_203B0E0->unk39; } -u8 sub_81297D0(void) +u16 sub_81297D0(void) { return gUnknown_203B0E0->unk16; } diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index 993481d3d..0e1e7c3b6 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -1,7 +1,12 @@ #include "global.h" #include "gflib.h" +#include "dynamic_placeholder_text_util.h" +#include "graphics.h" +#include "menu.h" #include "new_menu_helpers.h" #include "scanline_effect.h" +#include "strings.h" +#include "text_window.h" #include "union_room_chat.h" #include "union_room_chat_display.h" #include "union_room_chat_objects.h" @@ -36,6 +41,18 @@ struct Unk845AABC bool32 (*unk4)(u8 *); }; +struct Unk845AB64 +{ + const u8 *unk0; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; +}; + EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; void sub_8129BB8(struct UnionRoomChat2 * ptr); @@ -87,6 +104,8 @@ void sub_812ACEC(void); void sub_812AD04(void); void sub_812AD20(void); void sub_812AD50(void); +void sub_812ADA0(s16 a0); +void sub_812ADF8(s16 a0); const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); @@ -188,6 +207,30 @@ const struct Unk845AABC gUnknown_845AABC[] = { {20, sub_812A3D0} }; +const struct Unk845AB64 gUnknown_845AB64[] = { + {gText_QuitChatting, 1, 0, 0, 1, 2, 0, 0}, + {gText_RegisterTextWhere, 1, 0, 0, 1, 2, 0, 0}, + {gText_RegisterTextHere, 1, 0, 0, 1, 2, 0, 0}, + {gText_InputText, 1, 0, 0, 1, 2, 0, 0}, + {gText_ExitingTheChat, 2, 0, 0, 1, 2, 0, 0}, + {gText_LeaderHasLeftEndingChat, 2, 0, 0, 0, 2, 1, 0}, + {gText_RegisteredTextChanged_OKtoSave, 2, 0, 0, 1, 2, 0, 1}, + {gText_RegisteredTextChanged_AlreadySavedFile, 2, 0, 0, 1, 2, 0, 1}, + {gText_RegisteredTextChanged_SavingDontTurnOff, 2, 0, 0, 1, 2, 0, 1}, + {gText_RegisteredTextChanged_SavedTheGame, 2, 0, 0, 1, 2, 1, 1}, + {gText_IfLeaderLeavesChatWillEnd, 2, 0, 0, 1, 2, 0, 1} +}; + +const u8 gText_Ellipsis[] = _("…"); + +const struct MenuAction gUnknown_845ABEC[] = { + {gText_Upper}, + {gText_Lower}, + {gText_Symbols}, + {gText_Register2}, + {gText_Exit} +}; + bool8 sub_8129B14(void) { gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4)); @@ -654,3 +697,532 @@ bool32 sub_812A1B8(u8 *state) return TRUE; } + +bool32 sub_812A1FC(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(4, 0); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A240(u8 *state) +{ + u8 *str; + + switch (*state) + { + case 0: + DynamicPlaceholderTextUtil_Reset(); + str = sub_8129814(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + sub_812A578(5, 0); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A294(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(6, 0); + sub_812A424(23, 10, 1); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A2E4(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(7, 0); + sub_812A424(23, 10, 1); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A334(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(8, 0); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A378(u8 *state) +{ + switch (*state) + { + case 0: + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + sub_812A578(9, 0); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A3D0(u8 *state) +{ + switch (*state) + { + case 0: + sub_812A578(10, 0); + sub_812A424(23, 10, 1); + CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_812A420(u8 *arg0) +{ + return FALSE; +} + +void sub_812A424(u8 left, u8 top, u8 initialCursorPos) +{ + struct WindowTemplate template; + template.bg = 0; + template.tilemapLeft = left; + template.tilemapTop = top; + template.width = 6; + template.height = 4; + template.paletteNum = 14; + template.baseBlock = 0x52; + gUnknown_203B0E4->unk18 = AddWindow(&template); + if (gUnknown_203B0E4->unk18 != 0xFF) + { + FillWindowPixelBuffer(gUnknown_203B0E4->unk18, PIXEL_FILL(1)); + PutWindowTilemap(gUnknown_203B0E4->unk18); + AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL); + DrawTextBorderOuter(gUnknown_203B0E4->unk18, 1, 13); + Menu_InitCursor(gUnknown_203B0E4->unk18, 2, 0, 2, 14, 2, initialCursorPos); + } +} + +void sub_812A51C(void) +{ + if (gUnknown_203B0E4->unk18 != 0xFF) + { + ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk18, FALSE); + ClearWindowTilemap(gUnknown_203B0E4->unk18); + } +} + +void sub_812A544(void) +{ + if (gUnknown_203B0E4->unk18 != 0xFF) + { + RemoveWindow(gUnknown_203B0E4->unk18); + gUnknown_203B0E4->unk18 = 0xFF; + } +} + +s8 sub_812A568(void) +{ + return Menu_ProcessInput(); +} + +void sub_812A578(int arg0, u16 arg1) +{ + const u8 *str; + int windowId; + struct WindowTemplate template; + template.bg = 0; + template.tilemapLeft = 8; + template.tilemapTop = 16; + template.width = 21; + template.height = 4; + template.paletteNum = 14; + template.baseBlock = 0x06A; + if (gUnknown_845AB64[arg0].unkA) + { + template.tilemapLeft -= 7; + template.width += 7; + } + + gUnknown_203B0E4->unk1E = AddWindow(&template); + windowId = gUnknown_203B0E4->unk1E; + if (gUnknown_203B0E4->unk1E == 0xFF) + return; + + if (gUnknown_845AB64[arg0].unk9) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->unk22, gUnknown_845AB64[arg0].unk0); + str = gUnknown_203B0E4->unk22; + } + else + { + str = gUnknown_845AB64[arg0].unk0; + } + + ChangeBgY(0, arg1 * 256, 0); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + PutWindowTilemap(windowId); + if (gUnknown_845AB64[arg0].unk4 == 1) + { + DrawTextBorderInner(windowId, 0xA, 2); + AddTextPrinterParameterized5( + windowId, + 2, + str, + gUnknown_845AB64[arg0].unk5 + 8, + gUnknown_845AB64[arg0].unk6 + 8, + TEXT_SPEED_FF, + NULL, + gUnknown_845AB64[arg0].unk7, + gUnknown_845AB64[arg0].unk8); + } + else + { + DrawTextBorderOuter(windowId, 0xA, 2); + AddTextPrinterParameterized5( + windowId, + 2, + str, + gUnknown_845AB64[arg0].unk5, + gUnknown_845AB64[arg0].unk6, + TEXT_SPEED_FF, + NULL, + gUnknown_845AB64[arg0].unk7, + gUnknown_845AB64[arg0].unk8); + } + + gUnknown_203B0E4->unk1E = windowId; +} + +void sub_812A6F4(void) +{ + if (gUnknown_203B0E4->unk1E != 0xFF) + { + ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk1E, FALSE); + ClearWindowTilemap(gUnknown_203B0E4->unk1E); + } + + ChangeBgY(0, 0, 0); +} + +void sub_812A728(void) +{ + if (gUnknown_203B0E4->unk1E != 0xFF) + { + RemoveWindow(gUnknown_203B0E4->unk1E); + gUnknown_203B0E4->unk1E = 0xFF; + } +} + +void sub_812A74C(u16 x, u16 width, u8 fillValue) +{ + FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); +} + +void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) +{ + u8 *str2; + u8 sp[38]; + if (fillValue) + sub_812A74C(x, sub_81297DC() - x, fillValue); + + sp[0] = fillValue; + sp[1] = arg3; + sp[2] = arg4; + str2 = &sp[4]; + str2[0] = EXT_CTRL_CODE_BEGIN; + str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + str2[2] = 8; + StringCopy(&str2[3], str); + AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2); +} + +void sub_812A804(void) +{ + u8 page; + int i; + int var1; + u16 left; + u16 top; + u8 sp[52]; + u8 *str; + u8 *str2; + + FillWindowPixelBuffer(2, PIXEL_FILL(15)); + page = GetCurrentKeyboardPage(); + sp[0] = 0; + sp[1] = 14; + sp[2] = 13; + if (page != UNION_ROOM_KB_PAGE_COUNT) + { + str = &sp[4]; + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + var1 = 8; + str[2] = var1; + left = var1; + if (page == UNION_ROOM_KB_PAGE_EMOJI) + left = 6; + + for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12) + { + if (!gUnionRoomKeyboardText[page][i]) + return; + + StringCopy(&sp[7], gUnionRoomKeyboardText[page][i]); + AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); + } + } + else + { + left = 4; + for (i = 0, top = 0; i < 10; i++, top += 12) + { + str2 = sub_81294B0(i); + if (GetStringWidth(0, str2, 0) <= 40) + { + AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2); + } + else + { + int length = StringLength_Multibyte(str2); + do + { + length--; + StringCopyN_Multibyte(&sp[4], str2, length); + } while (GetStringWidth(0, &sp[4], 0) > 35); + + AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); + AddTextPrinterParameterized3(2, 0, left + 35, top, sp, TEXT_SPEED_FF, gText_Ellipsis); + } + } + } +} + +bool32 sub_812A980(void) +{ + if (gUnknown_203B0E4->unk20 < 56) + { + gUnknown_203B0E4->unk20 += 12; + if (gUnknown_203B0E4->unk20 >= 56) + gUnknown_203B0E4->unk20 = 56; + + if (gUnknown_203B0E4->unk20 < 56) + { + sub_812ADA0(gUnknown_203B0E4->unk20); + return TRUE; + } + } + + sub_812ADF8(gUnknown_203B0E4->unk20); + return FALSE; +} + +bool32 sub_812A9C8(void) +{ + if (gUnknown_203B0E4->unk20 > 0) + { + gUnknown_203B0E4->unk20 -= 12; + if (gUnknown_203B0E4->unk20 <= 0) + gUnknown_203B0E4->unk20 = 0; + + if (gUnknown_203B0E4->unk20 > 0) + { + sub_812ADA0(gUnknown_203B0E4->unk20); + return TRUE; + } + } + + sub_812ADF8(gUnknown_203B0E4->unk20); + return FALSE; +} + +void sub_812AA10(void) +{ + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + DrawTextBorderOuter(3, 1, 13); + UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, gUnknown_845ABEC); + Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage()); + PutWindowTilemap(3); +} + +void sub_812AA64(void) +{ + ClearStdWindowAndFrameToTransparent(3, FALSE); + ClearWindowTilemap(3); +} + +void sub_812AA78(u16 row, u8 *str, u8 arg2) +{ + u8 color[3]; + color[0] = 1; + color[1] = arg2 * 2 + 2; + color[2] = arg2 * 2 + 3; + FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str); +} + +void sub_812AAD4(void) +{ + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(64, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 144)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG2 | WININ_WIN0_BG3 + | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); +} + +void sub_812AB8C(void) +{ + SetBgTilemapBuffer(0, gUnknown_203B0E4->unk128); + SetBgTilemapBuffer(1, gUnknown_203B0E4->unk928); + SetBgTilemapBuffer(3, gUnknown_203B0E4->unk1128); + SetBgTilemapBuffer(2, gUnknown_203B0E4->unk1928); +} + +void sub_812ABD8(void) +{ + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + CopyBgTilemapBufferToVram(0); +} + +void sub_812AC08(void) +{ + LoadPalette(gUnknown_8EAA9F0, 0x70, 0x20); + LoadPalette(gUnknown_845AA24, 0xC0, 0x20); + DecompressAndCopyTileDataToVram(1, gUnknown_8EAAA10, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnknown_8EAAA6C, 0, 0); + CopyBgTilemapBufferToVram(1); +} + +void sub_812AC58(void) +{ + u8 *ptr; + + LoadPalette(gLinkMiscMenu_Pal, 0, 0x20); + ptr = DecompressAndCopyTileDataToVram(2, gLinkMiscMenu_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(2); +} + +void sub_812AC9C(void) +{ + LoadPalette(gUnknown_845AA44, 0x80, 0x20); + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); +} + +void sub_812ACC0(void) +{ + LoadPalette(gUnknown_845AA64, 0xF0, 0x20); + PutWindowTilemap(0); + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + CopyWindowToVram(0, 3); +} + +void sub_812ACEC(void) +{ + PutWindowTilemap(2); + sub_812A804(); + CopyWindowToVram(2, 3); +} + +void sub_812AD04(void) +{ + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); +} + +void sub_812AD20(void) +{ + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + TextWindow_SetUserSelectedFrame(3, 1, 0xD0); + TextWindow_SetStdFrame0_WithPal(3, 0xA, 0x20); + LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20); +} + +void sub_812AD50(void) +{ + struct ScanlineEffectParams params; + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.dmaDest = ®_BG1HOFS; + params.initState = 1; + params.unused9 = 0; + gUnknown_203B0E4->unk20 = 0; + CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); + ScanlineEffect_SetParams(params); +} + +void sub_812ADA0(s16 arg0) +{ + CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); +} + +void sub_812ADF8(s16 arg0) +{ + CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); + CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20); +} From 1f47b6ae4fefbe50a3680251fc9b88a7655e7179 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 16:10:18 -0500 Subject: [PATCH 08/11] union_room_chat_objects --- asm/union_room_chat.s | 475 ------------------------------ data/union_room_chat.s | 103 ------- include/graphics.h | 3 + include/union_room_chat.h | 3 + include/union_room_chat_objects.h | 2 +- ld_script.txt | 4 +- src/union_room_chat_display.c | 287 +++++++++++------- src/union_room_chat_objects.c | 316 ++++++++++++++++++++ sym_ewram.txt | 15 +- 9 files changed, 518 insertions(+), 690 deletions(-) delete mode 100644 asm/union_room_chat.s delete mode 100644 data/union_room_chat.s create mode 100644 src/union_room_chat_objects.c diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s deleted file mode 100644 index 1045cea43..000000000 --- a/asm/union_room_chat.s +++ /dev/null @@ -1,475 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_812AE70 -sub_812AE70: @ 812AE70 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _0812AE9C @ =gUnknown_845AF58 -_0812AE76: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x4 - bls _0812AE76 - ldr r0, _0812AEA0 @ =gUnknown_845AF80 - bl LoadSpritePalette - ldr r4, _0812AEA4 @ =gUnknown_203B0E8 - movs r0, 0x18 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0812AEA8 - movs r0, 0x1 - b _0812AEAA - .align 2, 0 -_0812AE9C: .4byte gUnknown_845AF58 -_0812AEA0: .4byte gUnknown_845AF80 -_0812AEA4: .4byte gUnknown_203B0E8 -_0812AEA8: - movs r0, 0 -_0812AEAA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_812AE70 - - thumb_func_start sub_812AEB0 -sub_812AEB0: @ 812AEB0 - push {lr} - ldr r0, _0812AEC4 @ =gUnknown_203B0E8 - ldr r0, [r0] - cmp r0, 0 - beq _0812AEBE - bl Free -_0812AEBE: - pop {r0} - bx r0 - .align 2, 0 -_0812AEC4: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AEB0 - - thumb_func_start sub_812AEC8 -sub_812AEC8: @ 812AEC8 - push {lr} - ldr r0, _0812AEF0 @ =gUnknown_845AFC0 - movs r1, 0xA - movs r2, 0x18 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0812AEF4 @ =gUnknown_203B0E8 - ldr r2, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0812AEF8 @ =gSprites - adds r1, r0 - str r1, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0812AEF0: .4byte gUnknown_845AFC0 -_0812AEF4: .4byte gUnknown_203B0E8 -_0812AEF8: .4byte gSprites - thumb_func_end sub_812AEC8 - - thumb_func_start sub_812AEFC -sub_812AEFC: @ 812AEFC - ldr r1, _0812AF18 @ =gUnknown_203B0E8 - ldr r1, [r1] - ldr r2, [r1] - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_0812AF18: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AEFC - - thumb_func_start sub_812AF1C -sub_812AF1C: @ 812AF1C - push {r4,r5,lr} - sub sp, 0x4 - bl GetCurrentKeyboardPage - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r5, sp - adds r5, 0x1 - mov r0, sp - adds r1, r5, 0 - bl sub_8129700 - cmp r4, 0x3 - beq _0812AF5C - ldr r4, _0812AF58 @ =gUnknown_203B0E8 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - ldr r1, [r4] - ldr r2, [r1] - mov r0, sp - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0xA - strh r0, [r2, 0x20] - ldr r2, [r1] - b _0812AF72 - .align 2, 0 -_0812AF58: .4byte gUnknown_203B0E8 -_0812AF5C: - ldr r4, _0812AF88 @ =gUnknown_203B0E8 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - ldr r2, [r4] - ldr r1, [r2] - movs r0, 0x18 - strh r0, [r1, 0x20] - ldr r2, [r2] -_0812AF72: - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, 0x18 - strh r0, [r2, 0x22] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812AF88: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AF1C - - thumb_func_start sub_812AF8C -sub_812AF8C: @ 812AF8C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 2 - ldr r0, _0812AFB8 @ =gUnknown_845AC14 + 2 - adds r4, r0 - movs r0, 0 - bl IndexOfSpritePaletteTag - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 4 - ldr r0, _0812AFBC @ =0x01010000 - adds r1, r0 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0x4 - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812AFB8: .4byte gUnknown_845AC14 + 2 -_0812AFBC: .4byte 0x01010000 - thumb_func_end sub_812AF8C - - thumb_func_start sub_812AFC0 -sub_812AFC0: @ 812AFC0 - push {lr} - bl GetCurrentKeyboardPage - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0812AFE0 - ldr r0, _0812AFDC @ =gUnknown_203B0E8 - ldr r0, [r0] - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - b _0812AFEC - .align 2, 0 -_0812AFDC: .4byte gUnknown_203B0E8 -_0812AFE0: - ldr r0, _0812AFF8 @ =gUnknown_203B0E8 - ldr r0, [r0] - ldr r0, [r0] - movs r1, 0x3 - bl StartSpriteAnim -_0812AFEC: - ldr r0, _0812AFF8 @ =gUnknown_203B0E8 - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x14] - pop {r0} - bx r0 - .align 2, 0 -_0812AFF8: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AFC0 - - thumb_func_start sub_812AFFC -sub_812AFFC: @ 812AFFC - push {r4,lr} - ldr r4, _0812B00C @ =gUnknown_203B0E8 - ldr r1, [r4] - ldrh r0, [r1, 0x14] - cmp r0, 0x3 - bls _0812B010 -_0812B008: - movs r0, 0 - b _0812B042 - .align 2, 0 -_0812B00C: .4byte gUnknown_203B0E8 -_0812B010: - adds r0, 0x1 - strh r0, [r1, 0x14] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3 - bls _0812B040 - bl GetCurrentKeyboardPage - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0812B034 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - b _0812B008 -_0812B034: - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - b _0812B008 -_0812B040: - movs r0, 0x1 -_0812B042: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812AFFC - - thumb_func_start sub_812B048 -sub_812B048: @ 812B048 - push {r4,r5,lr} - ldr r0, _0812B08C @ =gUnknown_845AFE0 - movs r1, 0x4C - movs r2, 0x98 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0812B090 @ =gUnknown_203B0E8 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r4, _0812B094 @ =gSprites - adds r1, r4 - str r1, [r2, 0x8] - ldr r0, _0812B098 @ =gUnknown_845AFF8 - movs r1, 0x40 - movs r2, 0x98 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - str r1, [r2, 0x4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B08C: .4byte gUnknown_845AFE0 -_0812B090: .4byte gUnknown_203B0E8 -_0812B094: .4byte gSprites -_0812B098: .4byte gUnknown_845AFF8 - thumb_func_end sub_812B048 - - thumb_func_start sub_812B09C -sub_812B09C: @ 812B09C - push {r4,lr} - adds r4, r0, 0 - bl sub_81297DC - adds r3, r0, 0 - cmp r3, 0xF - bne _0812B0B8 - adds r0, r4, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - b _0812B0CC -_0812B0B8: - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r2] - lsls r0, r3, 3 - adds r0, 0x4C - strh r0, [r4, 0x20] -_0812B0CC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_812B09C - - thumb_func_start sub_812B0D4 -sub_812B0D4: @ 812B0D4 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - movs r2, 0 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _0812B0FA - strh r2, [r1, 0x2E] - ldrh r0, [r1, 0x24] - adds r0, 0x1 - strh r0, [r1, 0x24] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _0812B0FA - strh r2, [r1, 0x24] -_0812B0FA: - pop {r0} - bx r0 - thumb_func_end sub_812B0D4 - - thumb_func_start sub_812B100 -sub_812B100: @ 812B100 - push {r4,r5,lr} - ldr r0, _0812B150 @ =gUnknown_845B050 - movs r1, 0x8 - movs r2, 0x98 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0812B154 @ =gUnknown_203B0E8 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r4, _0812B158 @ =gSprites - adds r1, r4 - str r1, [r2, 0xC] - ldr r0, _0812B15C @ =gUnknown_845B068 - movs r1, 0x20 - movs r2, 0x98 - movs r3, 0x4 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - str r1, [r2, 0x10] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B150: .4byte gUnknown_845B050 -_0812B154: .4byte gUnknown_203B0E8 -_0812B158: .4byte gSprites -_0812B15C: .4byte gUnknown_845B068 - thumb_func_end sub_812B100 - - thumb_func_start sub_812B160 -sub_812B160: @ 812B160 - push {r4,lr} - bl GetCurrentKeyboardPage - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0812B198 - bl sub_8129720 - cmp r0, 0 - beq _0812B1A2 - ldr r3, _0812B194 @ =gUnknown_203B0E8 - ldr r0, [r3] - ldr r1, [r0, 0x10] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r0, [r3] - ldr r0, [r0, 0x10] - movs r1, 0x3 - bl StartSpriteAnim - b _0812B1D6 - .align 2, 0 -_0812B194: .4byte gUnknown_203B0E8 -_0812B198: - bl sub_81297E8 - adds r4, r0, 0 - cmp r4, 0x3 - bne _0812B1B8 -_0812B1A2: - ldr r0, _0812B1B4 @ =gUnknown_203B0E8 - ldr r0, [r0] - ldr r1, [r0, 0x10] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - b _0812B1D6 - .align 2, 0 -_0812B1B4: .4byte gUnknown_203B0E8 -_0812B1B8: - ldr r3, _0812B1DC @ =gUnknown_203B0E8 - ldr r0, [r3] - ldr r1, [r0, 0x10] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r0, [r3] - ldr r0, [r0, 0x10] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim -_0812B1D6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812B1DC: .4byte gUnknown_203B0E8 - thumb_func_end sub_812B160 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/union_room_chat.s b/data/union_room_chat.s deleted file mode 100644 index 2873cd4b1..000000000 --- a/data/union_room_chat.s +++ /dev/null @@ -1,103 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_845AC14:: @ 845AC14 - .incbin "graphics/union_room_chat/unk_845AC14.gbapal" - -gUnknown_845AC34:: - .incbin "graphics/union_room_chat/unk_845AC34.4bpp.lz" - -gUnknown_845AEB8:: - .incbin "graphics/union_room_chat/unk_845AEB8.4bpp.lz" - -gUnknown_845AED8:: - .incbin "graphics/union_room_chat/unk_845AED8.4bpp.lz" - -gUnknown_845AF04:: - .incbin "graphics/union_room_chat/unk_845AF04.4bpp.lz" - -gUnknown_845AF58:: @ 845AF58 - obj_tiles gUnknown_845AC34, 0x1000, 0 - obj_tiles gUnknown_845AED8, 0x0040, 1 - obj_tiles gUnknown_845AEB8, 0x0040, 2 - obj_tiles gUnknown_845AF04, 0x0080, 3 - obj_tiles gUnknown_8EA1A50, 0x0400, 4 - -gUnknown_845AF80:: @ 845AF80 - obj_pal gUnknown_845AC14, 0 - -gOamData_845AF88:: - .4byte 0xc0004000, 0x00000400 - -gAnimCmd_845AF90:: - obj_image_anim_frame 0x0000, 30 - obj_image_anim_end - -gAnimCmd_845AF98:: - obj_image_anim_frame 0x0020, 30 - obj_image_anim_end - -gAnimCmd_845AFA0:: - obj_image_anim_frame 0x0040, 30 - obj_image_anim_end - -gAnimCmd_845AFA8:: - obj_image_anim_frame 0x0060, 30 - obj_image_anim_end - -gSpriteAnimTable_845AFB0:: - .4byte gAnimCmd_845AF90 - .4byte gAnimCmd_845AF98 - .4byte gAnimCmd_845AFA0 - .4byte gAnimCmd_845AFA8 - -gUnknown_845AFC0:: @ 845AFC0 - spr_template 0, 0, gOamData_845AF88, gSpriteAnimTable_845AFB0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gOamData_845AFD8:: - .4byte 0x00008000, 0x00000800 - -gUnknown_845AFE0:: @ 845AFE0 - spr_template 2, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B09C - -gUnknown_845AFF8:: @ 845AFF8 - spr_template 1, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B0D4 - -gOamData_845B010:: - .4byte 0x40000000, 0x00000800 - -gOamData_845B018:: - .4byte 0x80004000, 0x00000800 - -gAnimCmd_845B020:: - obj_image_anim_frame 0x0000, 2 - obj_image_anim_end - -gAnimCmd_845B028:: - obj_image_anim_frame 0x0008, 2 - obj_image_anim_end - -gAnimCmd_845B030:: - obj_image_anim_frame 0x0010, 2 - obj_image_anim_end - -gAnimCmd_845B038:: - obj_image_anim_frame 0x0018, 2 - obj_image_anim_end - -gSpriteAnimTable_845B040:: - .4byte gAnimCmd_845B020 - .4byte gAnimCmd_845B028 - .4byte gAnimCmd_845B030 - .4byte gAnimCmd_845B038 - -gUnknown_845B050:: @ 845B050 - spr_template 3, 0, gOamData_845B010, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_845B068:: @ 845B068 - spr_template 4, 0, gOamData_845B018, gSpriteAnimTable_845B040, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/include/graphics.h b/include/graphics.h index c3620279d..e77cd2502 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4872,4 +4872,7 @@ extern const u16 gLinkMiscMenu_Pal[]; extern const u32 gLinkMiscMenu_Gfx[]; extern const u32 gLinkMiscMenu_Tilemap[]; +// union_room_chat_objects +extern const u32 gUnknown_8EA1A50[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/union_room_chat.h b/include/union_room_chat.h index 93bd4a55f..13e51289e 100644 --- a/include/union_room_chat.h +++ b/include/union_room_chat.h @@ -13,13 +13,16 @@ extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_RO void sub_8128420(void); u8 *sub_81294B0(int arg0); +void sub_8129700(u8 *arg0, u8 *arg1); u8 *sub_8129714(void); +int sub_8129720(void); void sub_8129730(u32 *a0, u32 *a1); u8 *sub_8129758(void); u16 sub_8129788(void); u8 *sub_81297C4(void); u16 sub_81297D0(void); int sub_81297DC(void); +int sub_81297E8(void); u8 *sub_8129814(void); void copy_strings_to_sav1(void); u8 GetCurrentKeyboardPage(void); diff --git a/include/union_room_chat_objects.h b/include/union_room_chat_objects.h index 41db4d3a4..38c94b668 100644 --- a/include/union_room_chat_objects.h +++ b/include/union_room_chat_objects.h @@ -4,7 +4,7 @@ bool32 sub_812AE70(void); void sub_812AEB0(void); void sub_812AEC8(void); -void sub_812AEFC(bool8 invisible); +void sub_812AEFC(bool32 invisible); void sub_812AF1C(void); void sub_812AF8C(u32 idx); void sub_812AFC0(void); diff --git a/ld_script.txt b/ld_script.txt index c02fc0f08..48617df29 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -248,7 +248,7 @@ SECTIONS { src/party_menu.o(.text); src/union_room_chat.o(.text); src/union_room_chat_display.o(.text); - asm/union_room_chat.o(.text); + src/union_room_chat_objects.o(.text); src/help_system_812B1E0.o(.text); src/quest_log_battle.o(.text); src/fame_checker.o(.text); @@ -538,7 +538,7 @@ SECTIONS { src/party_menu.o(.rodata); src/union_room_chat.o(.rodata); src/union_room_chat_display.o(.rodata); - data/union_room_chat.o(.rodata); + src/union_room_chat_objects.o(.rodata); src/help_system_812B1E0.o(.rodata); src/fame_checker.o(.rodata); src/menu2.o(.rodata); diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index 0e1e7c3b6..c60c94eb0 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -11,46 +11,46 @@ #include "union_room_chat_display.h" #include "union_room_chat_objects.h" -struct UnionRoomChat2_Unk0 +struct UnionRoomChat2Subtask { - bool32 (*unk0)(u8 *); - u8 unk4; - u8 unk5; + bool32 (*callback)(u8 *); + u8 active; + u8 state; }; struct UnionRoomChat2 { - struct UnionRoomChat2_Unk0 unk0[3]; + struct UnionRoomChat2Subtask subtasks[3]; u16 unk18; u16 unk1A; u16 unk1C; - u16 unk1E; - s16 unk20; - u8 unk22[0x106]; - u8 unk128[BG_SCREEN_SIZE]; - u8 unk928[BG_SCREEN_SIZE]; - u8 unk1128[BG_SCREEN_SIZE]; - u8 unk1928[BG_SCREEN_SIZE]; + u16 messageWindowId; + s16 bg1hofs; + u8 expandedPlaceholdersBuffer[0x106]; + u8 bg0Buffer[BG_SCREEN_SIZE]; + u8 bg1Buffer[BG_SCREEN_SIZE]; + u8 bg3Buffer[BG_SCREEN_SIZE]; + u8 bg2Buffer[BG_SCREEN_SIZE]; u8 unk2128[0x20]; u8 unk2148[0x20]; }; struct Unk845AABC { - u16 unk0; - bool32 (*unk4)(u8 *); + u16 idx; + bool32 (*callback)(u8 *); }; struct Unk845AB64 { - const u8 *unk0; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; - u8 unkA; + const u8 *text; + bool8 boxType; + u8 x; + u8 y; + u8 letterSpacing; + u8 lineSpacing; + bool8 expandPlaceholders; + bool8 widerBox; }; EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; @@ -208,17 +208,106 @@ const struct Unk845AABC gUnknown_845AABC[] = { }; const struct Unk845AB64 gUnknown_845AB64[] = { - {gText_QuitChatting, 1, 0, 0, 1, 2, 0, 0}, - {gText_RegisterTextWhere, 1, 0, 0, 1, 2, 0, 0}, - {gText_RegisterTextHere, 1, 0, 0, 1, 2, 0, 0}, - {gText_InputText, 1, 0, 0, 1, 2, 0, 0}, - {gText_ExitingTheChat, 2, 0, 0, 1, 2, 0, 0}, - {gText_LeaderHasLeftEndingChat, 2, 0, 0, 0, 2, 1, 0}, - {gText_RegisteredTextChanged_OKtoSave, 2, 0, 0, 1, 2, 0, 1}, - {gText_RegisteredTextChanged_AlreadySavedFile, 2, 0, 0, 1, 2, 0, 1}, - {gText_RegisteredTextChanged_SavingDontTurnOff, 2, 0, 0, 1, 2, 0, 1}, - {gText_RegisteredTextChanged_SavedTheGame, 2, 0, 0, 1, 2, 1, 1}, - {gText_IfLeaderLeavesChatWillEnd, 2, 0, 0, 1, 2, 0, 1} + { + .text = gText_QuitChatting, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, { + .text = gText_RegisterTextWhere, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, { + .text = gText_RegisterTextHere, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, { + .text = gText_InputText, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, { + .text = gText_ExitingTheChat, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, { + .text = gText_LeaderHasLeftEndingChat, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 0, + .lineSpacing = 2, + .expandPlaceholders = TRUE, + .widerBox = FALSE + }, { + .text = gText_RegisteredTextChanged_OKtoSave, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + }, { + .text = gText_RegisteredTextChanged_AlreadySavedFile, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + }, { + .text = gText_RegisteredTextChanged_SavingDontTurnOff, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + }, { + .text = gText_RegisteredTextChanged_SavedTheGame, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = TRUE, + .widerBox = TRUE + }, { + .text = gText_IfLeaderLeavesChatWillEnd, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + } }; const u8 gText_Ellipsis[] = _("…"); @@ -270,7 +359,7 @@ void sub_8129B88(void) void sub_8129BB8(struct UnionRoomChat2 *arg0) { arg0->unk18 = 0xFF; - arg0->unk1E = 0xFF; + arg0->messageWindowId = 0xFF; arg0->unk1A = 0; } @@ -283,9 +372,9 @@ void sub_8129BC4(void) for (i = 0; i < 3; i++) { - gUnknown_203B0E4->unk0[i].unk0 = sub_812A420; - gUnknown_203B0E4->unk0[i].unk4 = 0; - gUnknown_203B0E4->unk0[i].unk5 = 0; + gUnknown_203B0E4->subtasks[i].callback = sub_812A420; + gUnknown_203B0E4->subtasks[i].active = FALSE; + gUnknown_203B0E4->subtasks[i].state = 0; } } @@ -298,8 +387,8 @@ void sub_8129BFC(void) for (i = 0; i < 3; i++) { - if (gUnknown_203B0E4->unk0[i].unk4) - gUnknown_203B0E4->unk0[i].unk4 = gUnknown_203B0E4->unk0[i].unk0(&gUnknown_203B0E4->unk0[i].unk5); + if (gUnknown_203B0E4->subtasks[i].active) + gUnknown_203B0E4->subtasks[i].active = gUnknown_203B0E4->subtasks[i].callback(&gUnknown_203B0E4->subtasks[i].state); } } @@ -307,14 +396,14 @@ void sub_8129C34(u16 arg0, u8 arg1) { int i; - gUnknown_203B0E4->unk0[arg1].unk0 = sub_812A420; + gUnknown_203B0E4->subtasks[arg1].callback = sub_812A420; for (i = 0; i < NELEMS(gUnknown_845AABC); i++) { - if (gUnknown_845AABC[i].unk0 == arg0) + if (gUnknown_845AABC[i].idx == arg0) { - gUnknown_203B0E4->unk0[arg1].unk0 = gUnknown_845AABC[i].unk4; - gUnknown_203B0E4->unk0[arg1].unk4 = 1; - gUnknown_203B0E4->unk0[arg1].unk5 = 0; + gUnknown_203B0E4->subtasks[arg1].callback = gUnknown_845AABC[i].callback; + gUnknown_203B0E4->subtasks[arg1].active = TRUE; + gUnknown_203B0E4->subtasks[arg1].state = 0; break; } } @@ -322,7 +411,7 @@ void sub_8129C34(u16 arg0, u8 arg1) bool8 sub_8129C8C(u8 arg0) { - return gUnknown_203B0E4->unk0[arg0].unk4; + return gUnknown_203B0E4->subtasks[arg0].active; } bool32 sub_8129CA0(u8 *state) @@ -445,7 +534,7 @@ bool32 sub_8129E28(u8 *state) case 0: sub_812A578(0, 0); sub_812A424(23, 11, 1); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -524,7 +613,7 @@ bool32 sub_8129F24(u8 *state) if (!IsDma3ManagerBusyWithBgCopy()) { sub_812A578(1, 16); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); } else { @@ -565,7 +654,7 @@ bool32 sub_8129FCC(u8 *state) if (!IsDma3ManagerBusyWithBgCopy()) { sub_812A6F4(); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); } else { @@ -688,7 +777,7 @@ bool32 sub_812A1B8(u8 *state) { case 0: sub_812A578(3, 16); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -704,7 +793,7 @@ bool32 sub_812A1FC(u8 *state) { case 0: sub_812A578(4, 0); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -725,7 +814,7 @@ bool32 sub_812A240(u8 *state) str = sub_8129814(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); sub_812A578(5, 0); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -742,7 +831,7 @@ bool32 sub_812A294(u8 *state) case 0: sub_812A578(6, 0); sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -759,7 +848,7 @@ bool32 sub_812A2E4(u8 *state) case 0: sub_812A578(7, 0); sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -775,7 +864,7 @@ bool32 sub_812A334(u8 *state) { case 0: sub_812A578(8, 0); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -793,7 +882,7 @@ bool32 sub_812A378(u8 *state) DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); sub_812A578(9, 0); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -810,7 +899,7 @@ bool32 sub_812A3D0(u8 *state) case 0: sub_812A578(10, 0); sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->unk1E, 3); + CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); (*state)++; break; case 1: @@ -882,43 +971,43 @@ void sub_812A578(int arg0, u16 arg1) template.height = 4; template.paletteNum = 14; template.baseBlock = 0x06A; - if (gUnknown_845AB64[arg0].unkA) + if (gUnknown_845AB64[arg0].widerBox) { template.tilemapLeft -= 7; template.width += 7; } - gUnknown_203B0E4->unk1E = AddWindow(&template); - windowId = gUnknown_203B0E4->unk1E; - if (gUnknown_203B0E4->unk1E == 0xFF) + gUnknown_203B0E4->messageWindowId = AddWindow(&template); + windowId = gUnknown_203B0E4->messageWindowId; + if (gUnknown_203B0E4->messageWindowId == 0xFF) return; - if (gUnknown_845AB64[arg0].unk9) + if (gUnknown_845AB64[arg0].expandPlaceholders) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->unk22, gUnknown_845AB64[arg0].unk0); - str = gUnknown_203B0E4->unk22; + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->expandedPlaceholdersBuffer, gUnknown_845AB64[arg0].text); + str = gUnknown_203B0E4->expandedPlaceholdersBuffer; } else { - str = gUnknown_845AB64[arg0].unk0; + str = gUnknown_845AB64[arg0].text; } ChangeBgY(0, arg1 * 256, 0); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); - if (gUnknown_845AB64[arg0].unk4 == 1) + if (gUnknown_845AB64[arg0].boxType == 1) { DrawTextBorderInner(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, 2, str, - gUnknown_845AB64[arg0].unk5 + 8, - gUnknown_845AB64[arg0].unk6 + 8, + gUnknown_845AB64[arg0].x + 8, + gUnknown_845AB64[arg0].y + 8, TEXT_SPEED_FF, NULL, - gUnknown_845AB64[arg0].unk7, - gUnknown_845AB64[arg0].unk8); + gUnknown_845AB64[arg0].letterSpacing, + gUnknown_845AB64[arg0].lineSpacing); } else { @@ -927,23 +1016,23 @@ void sub_812A578(int arg0, u16 arg1) windowId, 2, str, - gUnknown_845AB64[arg0].unk5, - gUnknown_845AB64[arg0].unk6, + gUnknown_845AB64[arg0].x, + gUnknown_845AB64[arg0].y, TEXT_SPEED_FF, NULL, - gUnknown_845AB64[arg0].unk7, - gUnknown_845AB64[arg0].unk8); + gUnknown_845AB64[arg0].letterSpacing, + gUnknown_845AB64[arg0].lineSpacing); } - gUnknown_203B0E4->unk1E = windowId; + gUnknown_203B0E4->messageWindowId = windowId; } void sub_812A6F4(void) { - if (gUnknown_203B0E4->unk1E != 0xFF) + if (gUnknown_203B0E4->messageWindowId != 0xFF) { - ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk1E, FALSE); - ClearWindowTilemap(gUnknown_203B0E4->unk1E); + ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->messageWindowId, FALSE); + ClearWindowTilemap(gUnknown_203B0E4->messageWindowId); } ChangeBgY(0, 0, 0); @@ -951,10 +1040,10 @@ void sub_812A6F4(void) void sub_812A728(void) { - if (gUnknown_203B0E4->unk1E != 0xFF) + if (gUnknown_203B0E4->messageWindowId != 0xFF) { - RemoveWindow(gUnknown_203B0E4->unk1E); - gUnknown_203B0E4->unk1E = 0xFF; + RemoveWindow(gUnknown_203B0E4->messageWindowId); + gUnknown_203B0E4->messageWindowId = 0xFF; } } @@ -1045,39 +1134,39 @@ void sub_812A804(void) bool32 sub_812A980(void) { - if (gUnknown_203B0E4->unk20 < 56) + if (gUnknown_203B0E4->bg1hofs < 56) { - gUnknown_203B0E4->unk20 += 12; - if (gUnknown_203B0E4->unk20 >= 56) - gUnknown_203B0E4->unk20 = 56; + gUnknown_203B0E4->bg1hofs += 12; + if (gUnknown_203B0E4->bg1hofs >= 56) + gUnknown_203B0E4->bg1hofs = 56; - if (gUnknown_203B0E4->unk20 < 56) + if (gUnknown_203B0E4->bg1hofs < 56) { - sub_812ADA0(gUnknown_203B0E4->unk20); + sub_812ADA0(gUnknown_203B0E4->bg1hofs); return TRUE; } } - sub_812ADF8(gUnknown_203B0E4->unk20); + sub_812ADF8(gUnknown_203B0E4->bg1hofs); return FALSE; } bool32 sub_812A9C8(void) { - if (gUnknown_203B0E4->unk20 > 0) + if (gUnknown_203B0E4->bg1hofs > 0) { - gUnknown_203B0E4->unk20 -= 12; - if (gUnknown_203B0E4->unk20 <= 0) - gUnknown_203B0E4->unk20 = 0; + gUnknown_203B0E4->bg1hofs -= 12; + if (gUnknown_203B0E4->bg1hofs <= 0) + gUnknown_203B0E4->bg1hofs = 0; - if (gUnknown_203B0E4->unk20 > 0) + if (gUnknown_203B0E4->bg1hofs > 0) { - sub_812ADA0(gUnknown_203B0E4->unk20); + sub_812ADA0(gUnknown_203B0E4->bg1hofs); return TRUE; } } - sub_812ADF8(gUnknown_203B0E4->unk20); + sub_812ADF8(gUnknown_203B0E4->bg1hofs); return FALSE; } @@ -1133,10 +1222,10 @@ void sub_812AAD4(void) void sub_812AB8C(void) { - SetBgTilemapBuffer(0, gUnknown_203B0E4->unk128); - SetBgTilemapBuffer(1, gUnknown_203B0E4->unk928); - SetBgTilemapBuffer(3, gUnknown_203B0E4->unk1128); - SetBgTilemapBuffer(2, gUnknown_203B0E4->unk1928); + SetBgTilemapBuffer(0, gUnknown_203B0E4->bg0Buffer); + SetBgTilemapBuffer(1, gUnknown_203B0E4->bg1Buffer); + SetBgTilemapBuffer(3, gUnknown_203B0E4->bg3Buffer); + SetBgTilemapBuffer(2, gUnknown_203B0E4->bg2Buffer); } void sub_812ABD8(void) @@ -1208,7 +1297,7 @@ void sub_812AD50(void) params.dmaDest = ®_BG1HOFS; params.initState = 1; params.unused9 = 0; - gUnknown_203B0E4->unk20 = 0; + gUnknown_203B0E4->bg1hofs = 0; CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); ScanlineEffect_SetParams(params); } diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c new file mode 100644 index 000000000..805e95d33 --- /dev/null +++ b/src/union_room_chat_objects.c @@ -0,0 +1,316 @@ +#include "global.h" +#include "gflib.h" +#include "decompress.h" +#include "graphics.h" +#include "union_room_chat.h" + +struct UnionRoomChat3 +{ + struct Sprite *unk0; + struct Sprite *unk4; + struct Sprite *unk8; + struct Sprite *unkC; + struct Sprite *unk10; + u16 unk14; +}; + +EWRAM_DATA struct UnionRoomChat3 *gUnknown_203B0E8 = NULL; + +void sub_812B09C(struct Sprite * sprite); +void sub_812B0D4(struct Sprite * sprite); + +const u16 gUnknown_845AC14[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); +const u32 gUnknown_845AC34[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); +const u32 gUnknown_845AEB8[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); +const u32 gUnknown_845AED8[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); +const u32 gUnknown_845AF04[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); + +const struct CompressedSpriteSheet gUnknown_845AF58[] = { + {gUnknown_845AC34, 0x1000, 0}, + {gUnknown_845AED8, 0x0040, 1}, + {gUnknown_845AEB8, 0x0040, 2}, + {gUnknown_845AF04, 0x0080, 3}, + {gUnknown_8EA1A50, 0x0400, 4} +}; + +const struct SpritePalette gUnknown_845AF80 = { + gUnknown_845AC14, 0 +}; + +const struct OamData gOamData_845AF88 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const union AnimCmd gAnimCmd_845AF90[] = { + ANIMCMD_FRAME(0x00, 30), + ANIMCMD_END +}; + +const union AnimCmd gAnimCmd_845AF98[] = { + ANIMCMD_FRAME(0x20, 30), + ANIMCMD_END +}; + +const union AnimCmd gAnimCmd_845AFA0[] = { + ANIMCMD_FRAME(0x40, 30), + ANIMCMD_END +}; + +const union AnimCmd gAnimCmd_845AFA8[] = { + ANIMCMD_FRAME(0x60, 30), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_845AFB0[] = { + gAnimCmd_845AF90, + gAnimCmd_845AF98, + gAnimCmd_845AFA0, + gAnimCmd_845AFA8 +}; + +const struct SpriteTemplate gUnknown_845AFC0 = { + .tileTag = 0, + .paletteTag = 0, + .oam = &gOamData_845AF88, + .anims = gSpriteAnimTable_845AFB0, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gOamData_845AFD8 = { + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2 +}; + +const struct SpriteTemplate gUnknown_845AFE0 = { + .tileTag = 2, + .paletteTag = 0, + .oam = &gOamData_845AFD8, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812B09C +}; + +const struct SpriteTemplate gUnknown_845AFF8 = { + .tileTag = 1, + .paletteTag = 0, + .oam = &gOamData_845AFD8, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812B0D4 +}; + +const struct OamData gOamData_845B010 = { + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 2 +}; + +const struct OamData gOamData_845B018 = { + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .priority = 2 +}; + +const union AnimCmd gAnimCmd_845B020[] = { + ANIMCMD_FRAME(0x00, 2), + ANIMCMD_END +}; + +const union AnimCmd gAnimCmd_845B028[] = { + ANIMCMD_FRAME(0x08, 2), + ANIMCMD_END +}; + +const union AnimCmd gAnimCmd_845B030[] = { + ANIMCMD_FRAME(0x10, 2), + ANIMCMD_END +}; + +const union AnimCmd gAnimCmd_845B038[] = { + ANIMCMD_FRAME(0x18, 2), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_845B040[] = { + gAnimCmd_845B020, + gAnimCmd_845B028, + gAnimCmd_845B030, + gAnimCmd_845B038 +}; + +const struct SpriteTemplate gUnknown_845B050 = { + .tileTag = 3, + .paletteTag = 0, + .oam = &gOamData_845B010, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct SpriteTemplate gUnknown_845B068 = { + .tileTag = 4, + .paletteTag = 0, + .oam = &gOamData_845B018, + .anims = gSpriteAnimTable_845B040, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +bool32 sub_812AE70(void) +{ + u32 i; + for (i = 0; i < 5; i++) + LoadCompressedSpriteSheet(&gUnknown_845AF58[i]); + + LoadSpritePalette(&gUnknown_845AF80); + gUnknown_203B0E8 = Alloc(0x18); + if (!gUnknown_203B0E8) + return FALSE; + + return TRUE; +} + +void sub_812AEB0(void) +{ + if (gUnknown_203B0E8) + Free(gUnknown_203B0E8); +} + +void sub_812AEC8(void) +{ + u8 spriteId = CreateSprite(&gUnknown_845AFC0, 10, 24, 0); + gUnknown_203B0E8->unk0 = &gSprites[spriteId]; +} + +void sub_812AEFC(bool32 invisible) +{ + gUnknown_203B0E8->unk0->invisible = invisible; +} + +void sub_812AF1C(void) +{ + u8 x, y; + u8 page = GetCurrentKeyboardPage(); + sub_8129700(&x, &y); + if (page != UNION_ROOM_KB_PAGE_COUNT) + { + StartSpriteAnim(gUnknown_203B0E8->unk0, 0); + gUnknown_203B0E8->unk0->pos1.x = x * 8 + 10; + gUnknown_203B0E8->unk0->pos1.y = y * 12 + 24; + } + else + { + StartSpriteAnim(gUnknown_203B0E8->unk0, 2); + gUnknown_203B0E8->unk0->pos1.x = 24; + gUnknown_203B0E8->unk0->pos1.y = y * 12 + 24; + } +} + +void sub_812AF8C(int arg0) +{ + const u16 *palette = &gUnknown_845AC14[arg0 * 2 + 1]; + u8 index = IndexOfSpritePaletteTag(0); + LoadPalette(palette, index * 16 + 0x101, 4); +} + +void sub_812AFC0(void) +{ + if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) + StartSpriteAnim(gUnknown_203B0E8->unk0, 1); + else + StartSpriteAnim(gUnknown_203B0E8->unk0, 3); + + gUnknown_203B0E8->unk14 = 0; +} + +bool32 sub_812AFFC(void) +{ + if (gUnknown_203B0E8->unk14 > 3) + return FALSE; + + if (++gUnknown_203B0E8->unk14 > 3) + { + if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) + StartSpriteAnim(gUnknown_203B0E8->unk0, 0); + else + StartSpriteAnim(gUnknown_203B0E8->unk0, 2); + + return FALSE; + } + + return TRUE; +} + +void sub_812B048(void) +{ + u8 spriteId = CreateSprite(&gUnknown_845AFE0, 76, 152, 2); + gUnknown_203B0E8->unk8 = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_845AFF8, 64, 152, 1); + gUnknown_203B0E8->unk4 = &gSprites[spriteId]; +} + +void sub_812B09C(struct Sprite *sprite) +{ + int var0 = sub_81297DC(); + if (var0 == 15) + { + sprite->invisible = TRUE; + } + else + { + sprite->invisible = FALSE; + sprite->pos1.x = var0 * 8 + 76; + } +} + +void sub_812B0D4(struct Sprite *sprite) +{ + if (++sprite->data[0] > 4) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 4) + sprite->pos2.x = 0; + } +} + +void sub_812B100(void) +{ + u8 spriteId = CreateSprite(&gUnknown_845B050, 8, 152, 3); + gUnknown_203B0E8->unkC = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_845B068, 32, 152, 4); + gUnknown_203B0E8->unk10 = &gSprites[spriteId]; + gUnknown_203B0E8->unk10->invisible = 1; +} + +void sub_812B160(void) +{ + if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT) + { + if (sub_8129720() != 0) + { + gUnknown_203B0E8->unk10->invisible = 0; + StartSpriteAnim(gUnknown_203B0E8->unk10, 3); + } + else + { + gUnknown_203B0E8->unk10->invisible = 1; + } + } + else + { + int anim = sub_81297E8(); + if (anim == 3) + { + gUnknown_203B0E8->unk10->invisible = 1; + } + else + { + gUnknown_203B0E8->unk10->invisible = 0; + StartSpriteAnim(gUnknown_203B0E8->unk10, anim); + } + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 3ab110c7b..b9b7063d0 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -369,17 +369,12 @@ gUnknown_203B098: @ 203B098 .align 2 .include "src/party_menu.o" - .align 2 -gUnknown_203B0E0: @ 203B0E0 - .space 0x4 - -gUnknown_203B0E4: @ 203B0E4 - .space 0x4 - -gUnknown_203B0E8: @ 203B0E8 - .space 0x4 - + .include "src/union_room_chat.o" + .align 2 + .include "src/union_room_chat_display.o" + .align 2 + .include "src/union_room_chat_objects.o" .align 2 .include "src/help_system_812B1E0.o" .align 2 From 52c0e05abbd0b58c943d045a8457c45c72caac38 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 16:17:51 -0500 Subject: [PATCH 09/11] Static symbols resolution --- src/union_room_chat.c | 143 +++++++++++----------- src/union_room_chat_display.c | 224 +++++++++++++++++----------------- src/union_room_chat_objects.c | 62 +++++----- 3 files changed, 214 insertions(+), 215 deletions(-) diff --git a/src/union_room_chat.c b/src/union_room_chat.c index f8243f742..751e5c865 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -47,42 +47,41 @@ struct UnionRoomChat u8 unk190[0x28]; }; -EWRAM_DATA struct UnionRoomChat * gUnknown_203B0E0 = NULL; +static EWRAM_DATA struct UnionRoomChat * gUnknown_203B0E0 = NULL; -void sub_812845C(struct UnionRoomChat * unionRoomChat); -void c2_081284E0(void); -void sub_81285B4(void); -void sub_81285CC(void); -void sub_81285E8(u8 taskId); -void sub_8128640(void); -void sub_81286C4(void); -void sub_81287B4(void); -void sub_81288D4(void); -void sub_8128AA0(void); -void sub_8128C04(void); -void sub_8128CA8(void); -void sub_8128DA4(void); -void sub_8128E78(void); -void sub_8128FB8(void); -void sub_8129218(u16 a0); -bool32 sub_8129228(void); -void sub_81292D8(void); -void sub_81293AC(void); -void sub_81293D8(void); -bool32 sub_8129408(void); -void sub_8129424(void); -void sub_8129454(void); -void sub_8129470(void); -u8 *sub_81294C8(void); -u8 *sub_81294EC(void); -void sub_8129560(u8 *ptr); -void sub_8129568(u8 *ptr); -void sub_8129590(u8 *ptr); -void sub_81295C0(u8 *ptr); -void sub_81295EC(u8 *ptr); -void sub_8129614(u8 *ptr); -u8 *sub_8129758(void); -void sub_81298F8(u8 taskId); +static void sub_812845C(struct UnionRoomChat * unionRoomChat); +static void c2_081284E0(void); +static void sub_81285B4(void); +static void sub_81285CC(void); +static void sub_81285E8(u8 taskId); +static void sub_8128640(void); +static void sub_81286C4(void); +static void sub_81287B4(void); +static void sub_81288D4(void); +static void sub_8128AA0(void); +static void sub_8128C04(void); +static void sub_8128CA8(void); +static void sub_8128DA4(void); +static void sub_8128E78(void); +static void sub_8128FB8(void); +static void sub_8129218(u16 a0); +static bool32 sub_8129228(void); +static void sub_81292D8(void); +static void sub_81293AC(void); +static void sub_81293D8(void); +static bool32 sub_8129408(void); +static void sub_8129424(void); +static void sub_8129454(void); +static void sub_8129470(void); +static u8 *sub_81294C8(void); +static u8 *sub_81294EC(void); +static void sub_8129560(u8 *ptr); +static void sub_8129568(u8 *ptr); +static void sub_8129590(u8 *ptr); +static void sub_81295C0(u8 *ptr); +static void sub_81295EC(u8 *ptr); +static void sub_8129614(u8 *ptr); +static void sub_81298F8(u8 taskId); static void (*const gUnknown_845A880[])(void) = { sub_8128640, @@ -105,7 +104,7 @@ static const u8 sKeyboardPageMaxRow[] = 9 }; -const u8 gUnknown_845A8AC[] = { +static const u8 gUnknown_845A8AC[] = { CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, @@ -189,7 +188,7 @@ void sub_8128420(void) SetMainCallback2(c2_081284E0); } -void sub_812845C(struct UnionRoomChat * unionRoomChat) +static void sub_812845C(struct UnionRoomChat * unionRoomChat) { int i; @@ -211,14 +210,14 @@ void sub_812845C(struct UnionRoomChat * unionRoomChat) StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3AD4[i]); } -void sub_81284BC(void) +static void sub_81284BC(void) { DestroyTask(gUnknown_203B0E0->unkE); DestroyTask(gUnknown_203B0E0->unkF); Free(gUnknown_203B0E0); } -void c2_081284E0(void) +static void c2_081284E0(void) { switch (gMain.state) { @@ -254,7 +253,7 @@ void c2_081284E0(void) } } -void sub_81285B4(void) +static void sub_81285B4(void) { TransferPlttBuffer(); LoadOam(); @@ -262,7 +261,7 @@ void sub_81285B4(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void sub_81285CC(void) +static void sub_81285CC(void) { RunTasks(); sub_8129BFC(); @@ -271,7 +270,7 @@ void sub_81285CC(void) UpdatePaletteFade(); } -void sub_81285E8(u8 taskId) +static void sub_81285E8(u8 taskId) { switch (gUnknown_203B0E0->unk17) { @@ -292,7 +291,7 @@ void sub_81285E8(u8 taskId) gUnknown_845A880[gUnknown_203B0E0->unk4](); } -void sub_8128640(void) +static void sub_8128640(void) { switch (gUnknown_203B0E0->unk6) { @@ -314,7 +313,7 @@ void sub_8128640(void) } } -void sub_81286C4(void) +static void sub_81286C4(void) { bool8 var0, var1; @@ -378,7 +377,7 @@ void sub_81286C4(void) } } -void sub_81287B4(void) +static void sub_81287B4(void) { s16 input; int var0; @@ -439,7 +438,7 @@ void sub_81287B4(void) } } -void sub_81288D4(void) +static void sub_81288D4(void) { s8 input; @@ -526,7 +525,7 @@ void sub_81288D4(void) } } -void sub_8128AA0(void) +static void sub_8128AA0(void) { switch (gUnknown_203B0E0->unk6) { @@ -583,7 +582,7 @@ void sub_8128AA0(void) } } -void sub_8128C04(void) +static void sub_8128C04(void) { switch (gUnknown_203B0E0->unk6) { @@ -618,7 +617,7 @@ void sub_8128C04(void) } } -void sub_8128CA8(void) +static void sub_8128CA8(void) { switch (gUnknown_203B0E0->unk6) { @@ -664,7 +663,7 @@ void sub_8128CA8(void) } } -void sub_8128DA4(void) +static void sub_8128DA4(void) { switch (gUnknown_203B0E0->unk6) { @@ -698,7 +697,7 @@ void sub_8128DA4(void) } } -void sub_8128E78(void) +static void sub_8128E78(void) { switch (gUnknown_203B0E0->unk6) { @@ -761,7 +760,7 @@ void sub_8128E78(void) } } -void sub_8128FB8(void) +static void sub_8128FB8(void) { s8 input; @@ -877,13 +876,13 @@ void sub_8128FB8(void) } } -void sub_8129218(u16 arg0) +static void sub_8129218(u16 arg0) { gUnknown_203B0E0->unk4 = arg0; gUnknown_203B0E0->unk6 = 0; } -bool32 sub_8129228(void) +static bool32 sub_8129228(void) { if (!(gMain.newAndRepeatedKeys & DPAD_UP)) { @@ -934,7 +933,7 @@ bool32 sub_8129228(void) } } -void sub_81292D8(void) +static void sub_81292D8(void) { int i; const u8 *charsStr; @@ -987,7 +986,7 @@ void sub_81292D8(void) *str = EOS; } -void sub_81293AC(void) +static void sub_81293AC(void) { gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; if (gUnknown_203B0E0->unk15) @@ -998,7 +997,7 @@ void sub_81293AC(void) } } -void sub_81293D8(void) +static void sub_81293D8(void) { u8 *str; u8 character; @@ -1013,7 +1012,7 @@ void sub_81293D8(void) } } -bool32 sub_8129408(void) +static bool32 sub_8129408(void) { if (gUnknown_203B0E0->unk15) return TRUE; @@ -1021,21 +1020,21 @@ bool32 sub_8129408(void) return FALSE; } -void sub_8129424(void) +static void sub_8129424(void) { u8 *src = sub_8129758(); StringCopy(gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow], src); gUnknown_203B0E0->unk18 = 1; } -void sub_8129454(void) +static void sub_8129454(void) { gUnknown_203B0E0->unk1A[0] = EOS; gUnknown_203B0E0->unk14 = 15; gUnknown_203B0E0->unk15 = 0; } -void sub_8129470(void) +static void sub_8129470(void) { int i; for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) @@ -1048,7 +1047,7 @@ u8 *sub_81294B0(int arg0) } // GetEndOfUnk1A -u8 *sub_81294C8(void) +static u8 *sub_81294C8(void) { u8 *str = gUnknown_203B0E0->unk1A; while (*str != EOS) @@ -1058,7 +1057,7 @@ u8 *sub_81294C8(void) } // GetPtrToLastCharOfUnk1A -u8 *sub_81294EC(void) +static u8 *sub_81294EC(void) { u8 *str = gUnknown_203B0E0->unk1A; u8 *str2 = str; @@ -1073,7 +1072,7 @@ u8 *sub_81294EC(void) return str2; } -u16 sub_812951C(void) +static u16 sub_812951C(void) { u8 *str; u32 i, numChars, strLength; @@ -1097,26 +1096,26 @@ u16 sub_812951C(void) return numChars; } -void sub_8129560(u8 *arg0) +static void sub_8129560(u8 *arg0) { arg0[0] = 0; } -void sub_8129568(u8 *arg0) +static void sub_8129568(u8 *arg0) { arg0[0] = 2; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; } -void sub_8129590(u8 *arg0) +static void sub_8129590(u8 *arg0) { arg0[0] = 1; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_203B0E0->unk1A); } -void sub_81295C0(u8 *arg0) +static void sub_81295C0(u8 *arg0) { arg0[0] = 3; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); @@ -1124,21 +1123,21 @@ void sub_81295C0(u8 *arg0) sub_80FB9D0(); } -void sub_81295EC(u8 *arg0) +static void sub_81295EC(u8 *arg0) { arg0[0] = 4; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; } -void sub_8129614(u8 *arg0) +static void sub_8129614(u8 *arg0) { arg0[0] = 5; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; } -bool32 sub_812963C(u8 *arg0, u8 *arg1) +static bool32 sub_812963C(u8 *arg0, u8 *arg1) { u8 *tempStr; u8 var0 = *arg1; @@ -1297,7 +1296,7 @@ void copy_strings_to_sav1(void) StringCopy(gSaveBlock1Ptr->unk3AD4[9], gText_ByeBye); } -void sub_81298F8(u8 taskId) +static void sub_81298F8(u8 taskId) { u8 *buffer; s16 *data = gTasks[taskId].data; diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index c60c94eb0..4bd4be8fe 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -53,65 +53,65 @@ struct Unk845AB64 bool8 widerBox; }; -EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; +static EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; -void sub_8129BB8(struct UnionRoomChat2 * ptr); -void sub_8129BC4(void); -bool32 sub_8129CA0(u8 *state); -bool32 sub_8129D40(u8 *state); -bool32 sub_8129D78(u8 *state); -bool32 sub_8129DB0(u8 *state); -bool32 sub_8129E1C(u8 *state); -bool32 sub_8129E28(u8 *state); -bool32 sub_8129E74(u8 *state); -bool32 sub_8129EB8(u8 *state); -bool32 sub_8129F24(u8 *state); -bool32 sub_8129FCC(u8 *state); -bool32 sub_812A074(u8 *state); -bool32 sub_812A0B0(u8 *state); -bool32 sub_812A18C(u8 *state); -bool32 sub_812A1B8(u8 *state); -bool32 sub_812A1FC(u8 *state); -bool32 sub_812A240(u8 *state); -bool32 sub_812A294(u8 *state); -bool32 sub_812A2E4(u8 *state); -bool32 sub_812A334(u8 *state); -bool32 sub_812A378(u8 *state); -bool32 sub_812A3D0(u8 *state); -bool32 sub_812A420(u8 *state); -void sub_812A424(u8 a0, u8 a1, u8 a2); -void sub_812A51C(void); -void sub_812A544(void); -void sub_812A578(int a0, u16 a1); -void sub_812A6F4(void); -void sub_812A728(void); -void sub_812A74C(u16 a0, u16 a1, u8 a2); -void sub_812A778(u16 a0, u8 *a1, u8 a2, u8 a3, u8 a4); -void sub_812A804(void); -bool32 sub_812A980(void); -bool32 sub_812A9C8(void); -void sub_812AA10(void); -void sub_812AA64(void); -void sub_812AA78(u16 a0, u8 *a1, u8 a2); -void sub_812AAD4(void); -void sub_812AB8C(void); -void sub_812ABD8(void); -void sub_812AC08(void); -void sub_812AC58(void); -void sub_812AC9C(void); -void sub_812ACC0(void); -void sub_812ACEC(void); -void sub_812AD04(void); -void sub_812AD20(void); -void sub_812AD50(void); -void sub_812ADA0(s16 a0); -void sub_812ADF8(s16 a0); +static void sub_8129BB8(struct UnionRoomChat2 * ptr); +static void sub_8129BC4(void); +static bool32 sub_8129CA0(u8 *state); +static bool32 sub_8129D40(u8 *state); +static bool32 sub_8129D78(u8 *state); +static bool32 sub_8129DB0(u8 *state); +static bool32 sub_8129E1C(u8 *state); +static bool32 sub_8129E28(u8 *state); +static bool32 sub_8129E74(u8 *state); +static bool32 sub_8129EB8(u8 *state); +static bool32 sub_8129F24(u8 *state); +static bool32 sub_8129FCC(u8 *state); +static bool32 sub_812A074(u8 *state); +static bool32 sub_812A0B0(u8 *state); +static bool32 sub_812A18C(u8 *state); +static bool32 sub_812A1B8(u8 *state); +static bool32 sub_812A1FC(u8 *state); +static bool32 sub_812A240(u8 *state); +static bool32 sub_812A294(u8 *state); +static bool32 sub_812A2E4(u8 *state); +static bool32 sub_812A334(u8 *state); +static bool32 sub_812A378(u8 *state); +static bool32 sub_812A3D0(u8 *state); +static bool32 sub_812A420(u8 *state); +static void sub_812A424(u8 a0, u8 a1, u8 a2); +static void sub_812A51C(void); +static void sub_812A544(void); +static void sub_812A578(int a0, u16 a1); +static void sub_812A6F4(void); +static void sub_812A728(void); +static void sub_812A74C(u16 a0, u16 a1, u8 a2); +static void sub_812A778(u16 a0, u8 *a1, u8 a2, u8 a3, u8 a4); +static void sub_812A804(void); +static bool32 sub_812A980(void); +static bool32 sub_812A9C8(void); +static void sub_812AA10(void); +static void sub_812AA64(void); +static void sub_812AA78(u16 a0, u8 *a1, u8 a2); +static void sub_812AAD4(void); +static void sub_812AB8C(void); +static void sub_812ABD8(void); +static void sub_812AC08(void); +static void sub_812AC58(void); +static void sub_812AC9C(void); +static void sub_812ACC0(void); +static void sub_812ACEC(void); +static void sub_812AD04(void); +static void sub_812AD20(void); +static void sub_812AD50(void); +static void sub_812ADA0(s16 a0); +static void sub_812ADF8(s16 a0); -const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); -const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); -const u16 gUnknown_845AA64[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); +static const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); +static const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); +static const u16 gUnknown_845AA64[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); -const struct BgTemplate gUnknown_845AA84[] = { +static const struct BgTemplate gUnknown_845AA84[] = { { .bg = 0, .charBaseIndex = 0, @@ -147,7 +147,7 @@ const struct BgTemplate gUnknown_845AA84[] = { } }; -const struct WindowTemplate gUnknown_845AA94[] = { +static const struct WindowTemplate gUnknown_845AA94[] = { { .bg = 3, .tilemapLeft = 8, @@ -183,7 +183,7 @@ const struct WindowTemplate gUnknown_845AA94[] = { }, DUMMY_WIN_TEMPLATE }; -const struct Unk845AABC gUnknown_845AABC[] = { +static const struct Unk845AABC gUnknown_845AABC[] = { { 0, sub_8129CA0}, { 3, sub_8129D40}, { 4, sub_8129D78}, @@ -207,7 +207,7 @@ const struct Unk845AABC gUnknown_845AABC[] = { {20, sub_812A3D0} }; -const struct Unk845AB64 gUnknown_845AB64[] = { +static const struct Unk845AB64 gUnknown_845AB64[] = { { .text = gText_QuitChatting, .boxType = 1, @@ -310,9 +310,9 @@ const struct Unk845AB64 gUnknown_845AB64[] = { } }; -const u8 gText_Ellipsis[] = _("…"); +static const u8 gText_Ellipsis[] = _("…"); -const struct MenuAction gUnknown_845ABEC[] = { +static const struct MenuAction gUnknown_845ABEC[] = { {gText_Upper}, {gText_Lower}, {gText_Symbols}, @@ -356,7 +356,7 @@ void sub_8129B88(void) gScanlineEffect.state = 3; } -void sub_8129BB8(struct UnionRoomChat2 *arg0) +static void sub_8129BB8(struct UnionRoomChat2 *arg0) { arg0->unk18 = 0xFF; arg0->messageWindowId = 0xFF; @@ -367,7 +367,7 @@ void sub_8129BC4(void) { int i; - if (!gUnknown_203B0E4) + if (gUnknown_203B0E4 == NULL) return; for (i = 0; i < 3; i++) @@ -414,7 +414,7 @@ bool8 sub_8129C8C(u8 arg0) return gUnknown_203B0E4->subtasks[arg0].active; } -bool32 sub_8129CA0(u8 *state) +static bool32 sub_8129CA0(u8 *state) { if (FreeTempTileDataBuffersIfPossible() == TRUE) return TRUE; @@ -459,7 +459,7 @@ bool32 sub_8129CA0(u8 *state) return TRUE; } -bool32 sub_8129D40(u8 *state) +static bool32 sub_8129D40(u8 *state) { switch (*state) { @@ -475,7 +475,7 @@ bool32 sub_8129D40(u8 *state) return TRUE; } -bool32 sub_8129D78(u8 *state) +static bool32 sub_8129D78(u8 *state) { switch (*state) { @@ -491,7 +491,7 @@ bool32 sub_8129D78(u8 *state) return TRUE; } -bool32 sub_8129DB0(u8 *state) +static bool32 sub_8129DB0(u8 *state) { switch (*state) { @@ -521,13 +521,13 @@ bool32 sub_8129DB0(u8 *state) return TRUE; } -bool32 sub_8129E1C(u8 *state) +static bool32 sub_8129E1C(u8 *state) { sub_812AF1C(); return FALSE; } -bool32 sub_8129E28(u8 *state) +static bool32 sub_8129E28(u8 *state) { switch (*state) { @@ -544,7 +544,7 @@ bool32 sub_8129E28(u8 *state) return TRUE; } -bool32 sub_8129E74(u8 *state) +static bool32 sub_8129E74(u8 *state) { switch (*state) { @@ -566,7 +566,7 @@ bool32 sub_8129E74(u8 *state) return TRUE; } -bool32 sub_8129EB8(u8 *state) +static bool32 sub_8129EB8(u8 *state) { u32 var0, var1; u8 *str; @@ -593,7 +593,7 @@ bool32 sub_8129EB8(u8 *state) return TRUE; } -bool32 sub_8129F24(u8 *state) +static bool32 sub_8129F24(u8 *state) { u16 var0; u8 *str; @@ -634,7 +634,7 @@ bool32 sub_8129F24(u8 *state) return TRUE; } -bool32 sub_8129FCC(u8 *state) +static bool32 sub_8129FCC(u8 *state) { u16 var0; u8 *str; @@ -680,7 +680,7 @@ bool32 sub_8129FCC(u8 *state) return TRUE; } -bool32 sub_812A074(u8 *state) +static bool32 sub_812A074(u8 *state) { switch (*state) { @@ -699,7 +699,7 @@ bool32 sub_812A074(u8 *state) return TRUE; } -bool32 sub_812A0B0(u8 *state) +static bool32 sub_812A0B0(u8 *state) { u16 var0; u8 *str; @@ -756,7 +756,7 @@ bool32 sub_812A0B0(u8 *state) return TRUE; } -bool32 sub_812A18C(u8 *state) +static bool32 sub_812A18C(u8 *state) { switch (*state) { @@ -771,7 +771,7 @@ bool32 sub_812A18C(u8 *state) return TRUE; } -bool32 sub_812A1B8(u8 *state) +static bool32 sub_812A1B8(u8 *state) { switch (*state) { @@ -787,7 +787,7 @@ bool32 sub_812A1B8(u8 *state) return TRUE; } -bool32 sub_812A1FC(u8 *state) +static bool32 sub_812A1FC(u8 *state) { switch (*state) { @@ -803,7 +803,7 @@ bool32 sub_812A1FC(u8 *state) return TRUE; } -bool32 sub_812A240(u8 *state) +static bool32 sub_812A240(u8 *state) { u8 *str; @@ -824,7 +824,7 @@ bool32 sub_812A240(u8 *state) return TRUE; } -bool32 sub_812A294(u8 *state) +static bool32 sub_812A294(u8 *state) { switch (*state) { @@ -841,7 +841,7 @@ bool32 sub_812A294(u8 *state) return TRUE; } -bool32 sub_812A2E4(u8 *state) +static bool32 sub_812A2E4(u8 *state) { switch (*state) { @@ -858,7 +858,7 @@ bool32 sub_812A2E4(u8 *state) return TRUE; } -bool32 sub_812A334(u8 *state) +static bool32 sub_812A334(u8 *state) { switch (*state) { @@ -874,7 +874,7 @@ bool32 sub_812A334(u8 *state) return TRUE; } -bool32 sub_812A378(u8 *state) +static bool32 sub_812A378(u8 *state) { switch (*state) { @@ -892,7 +892,7 @@ bool32 sub_812A378(u8 *state) return TRUE; } -bool32 sub_812A3D0(u8 *state) +static bool32 sub_812A3D0(u8 *state) { switch (*state) { @@ -909,12 +909,12 @@ bool32 sub_812A3D0(u8 *state) return TRUE; } -bool32 sub_812A420(u8 *arg0) +static bool32 sub_812A420(u8 *arg0) { return FALSE; } -void sub_812A424(u8 left, u8 top, u8 initialCursorPos) +static void sub_812A424(u8 left, u8 top, u8 initialCursorPos) { struct WindowTemplate template; template.bg = 0; @@ -936,7 +936,7 @@ void sub_812A424(u8 left, u8 top, u8 initialCursorPos) } } -void sub_812A51C(void) +static void sub_812A51C(void) { if (gUnknown_203B0E4->unk18 != 0xFF) { @@ -945,7 +945,7 @@ void sub_812A51C(void) } } -void sub_812A544(void) +static void sub_812A544(void) { if (gUnknown_203B0E4->unk18 != 0xFF) { @@ -959,7 +959,7 @@ s8 sub_812A568(void) return Menu_ProcessInput(); } -void sub_812A578(int arg0, u16 arg1) +static void sub_812A578(int arg0, u16 arg1) { const u8 *str; int windowId; @@ -1027,7 +1027,7 @@ void sub_812A578(int arg0, u16 arg1) gUnknown_203B0E4->messageWindowId = windowId; } -void sub_812A6F4(void) +static void sub_812A6F4(void) { if (gUnknown_203B0E4->messageWindowId != 0xFF) { @@ -1038,7 +1038,7 @@ void sub_812A6F4(void) ChangeBgY(0, 0, 0); } -void sub_812A728(void) +static void sub_812A728(void) { if (gUnknown_203B0E4->messageWindowId != 0xFF) { @@ -1047,12 +1047,12 @@ void sub_812A728(void) } } -void sub_812A74C(u16 x, u16 width, u8 fillValue) +static void sub_812A74C(u16 x, u16 width, u8 fillValue) { FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); } -void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) +static void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) { u8 *str2; u8 sp[38]; @@ -1070,7 +1070,7 @@ void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2); } -void sub_812A804(void) +static void sub_812A804(void) { u8 page; int i; @@ -1132,7 +1132,7 @@ void sub_812A804(void) } } -bool32 sub_812A980(void) +static bool32 sub_812A980(void) { if (gUnknown_203B0E4->bg1hofs < 56) { @@ -1151,7 +1151,7 @@ bool32 sub_812A980(void) return FALSE; } -bool32 sub_812A9C8(void) +static bool32 sub_812A9C8(void) { if (gUnknown_203B0E4->bg1hofs > 0) { @@ -1170,7 +1170,7 @@ bool32 sub_812A9C8(void) return FALSE; } -void sub_812AA10(void) +static void sub_812AA10(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); @@ -1179,13 +1179,13 @@ void sub_812AA10(void) PutWindowTilemap(3); } -void sub_812AA64(void) +static void sub_812AA64(void) { ClearStdWindowAndFrameToTransparent(3, FALSE); ClearWindowTilemap(3); } -void sub_812AA78(u16 row, u8 *str, u8 arg2) +static void sub_812AA78(u16 row, u8 *str, u8 arg2) { u8 color[3]; color[0] = 1; @@ -1195,7 +1195,7 @@ void sub_812AA78(u16 row, u8 *str, u8 arg2) AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str); } -void sub_812AAD4(void) +static void sub_812AAD4(void) { ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -1220,7 +1220,7 @@ void sub_812AAD4(void) SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); } -void sub_812AB8C(void) +static void sub_812AB8C(void) { SetBgTilemapBuffer(0, gUnknown_203B0E4->bg0Buffer); SetBgTilemapBuffer(1, gUnknown_203B0E4->bg1Buffer); @@ -1228,14 +1228,14 @@ void sub_812AB8C(void) SetBgTilemapBuffer(2, gUnknown_203B0E4->bg2Buffer); } -void sub_812ABD8(void) +static void sub_812ABD8(void) { RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); } -void sub_812AC08(void) +static void sub_812AC08(void) { LoadPalette(gUnknown_8EAA9F0, 0x70, 0x20); LoadPalette(gUnknown_845AA24, 0xC0, 0x20); @@ -1244,7 +1244,7 @@ void sub_812AC08(void) CopyBgTilemapBufferToVram(1); } -void sub_812AC58(void) +static void sub_812AC58(void) { u8 *ptr; @@ -1254,13 +1254,13 @@ void sub_812AC58(void) CopyBgTilemapBufferToVram(2); } -void sub_812AC9C(void) +static void sub_812AC9C(void) { LoadPalette(gUnknown_845AA44, 0x80, 0x20); RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); } -void sub_812ACC0(void) +static void sub_812ACC0(void) { LoadPalette(gUnknown_845AA64, 0xF0, 0x20); PutWindowTilemap(0); @@ -1268,21 +1268,21 @@ void sub_812ACC0(void) CopyWindowToVram(0, 3); } -void sub_812ACEC(void) +static void sub_812ACEC(void) { PutWindowTilemap(2); sub_812A804(); CopyWindowToVram(2, 3); } -void sub_812AD04(void) +static void sub_812AD04(void) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); PutWindowTilemap(1); CopyWindowToVram(1, 3); } -void sub_812AD20(void) +static void sub_812AD20(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); TextWindow_SetUserSelectedFrame(3, 1, 0xD0); @@ -1290,7 +1290,7 @@ void sub_812AD20(void) LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20); } -void sub_812AD50(void) +static void sub_812AD50(void) { struct ScanlineEffectParams params; params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; @@ -1302,13 +1302,13 @@ void sub_812AD50(void) ScanlineEffect_SetParams(params); } -void sub_812ADA0(s16 arg0) +static void sub_812ADA0(s16 arg0) { CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); } -void sub_812ADF8(s16 arg0) +static void sub_812ADF8(s16 arg0) { CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c index 805e95d33..70f9f48ff 100644 --- a/src/union_room_chat_objects.c +++ b/src/union_room_chat_objects.c @@ -14,18 +14,18 @@ struct UnionRoomChat3 u16 unk14; }; -EWRAM_DATA struct UnionRoomChat3 *gUnknown_203B0E8 = NULL; +static EWRAM_DATA struct UnionRoomChat3 *gUnknown_203B0E8 = NULL; -void sub_812B09C(struct Sprite * sprite); -void sub_812B0D4(struct Sprite * sprite); +static void sub_812B09C(struct Sprite * sprite); +static void sub_812B0D4(struct Sprite * sprite); -const u16 gUnknown_845AC14[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); -const u32 gUnknown_845AC34[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); -const u32 gUnknown_845AEB8[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); -const u32 gUnknown_845AED8[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); -const u32 gUnknown_845AF04[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); +static const u16 gUnknown_845AC14[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); +static const u32 gUnknown_845AC34[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); +static const u32 gUnknown_845AEB8[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); +static const u32 gUnknown_845AED8[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); +static const u32 gUnknown_845AF04[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); -const struct CompressedSpriteSheet gUnknown_845AF58[] = { +static const struct CompressedSpriteSheet gUnknown_845AF58[] = { {gUnknown_845AC34, 0x1000, 0}, {gUnknown_845AED8, 0x0040, 1}, {gUnknown_845AEB8, 0x0040, 2}, @@ -33,44 +33,44 @@ const struct CompressedSpriteSheet gUnknown_845AF58[] = { {gUnknown_8EA1A50, 0x0400, 4} }; -const struct SpritePalette gUnknown_845AF80 = { +static const struct SpritePalette gUnknown_845AF80 = { gUnknown_845AC14, 0 }; -const struct OamData gOamData_845AF88 = { +static const struct OamData gOamData_845AF88 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -const union AnimCmd gAnimCmd_845AF90[] = { +static const union AnimCmd gAnimCmd_845AF90[] = { ANIMCMD_FRAME(0x00, 30), ANIMCMD_END }; -const union AnimCmd gAnimCmd_845AF98[] = { +static const union AnimCmd gAnimCmd_845AF98[] = { ANIMCMD_FRAME(0x20, 30), ANIMCMD_END }; -const union AnimCmd gAnimCmd_845AFA0[] = { +static const union AnimCmd gAnimCmd_845AFA0[] = { ANIMCMD_FRAME(0x40, 30), ANIMCMD_END }; -const union AnimCmd gAnimCmd_845AFA8[] = { +static const union AnimCmd gAnimCmd_845AFA8[] = { ANIMCMD_FRAME(0x60, 30), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_845AFB0[] = { +static const union AnimCmd *const gSpriteAnimTable_845AFB0[] = { gAnimCmd_845AF90, gAnimCmd_845AF98, gAnimCmd_845AFA0, gAnimCmd_845AFA8 }; -const struct SpriteTemplate gUnknown_845AFC0 = { +static const struct SpriteTemplate gUnknown_845AFC0 = { .tileTag = 0, .paletteTag = 0, .oam = &gOamData_845AF88, @@ -79,13 +79,13 @@ const struct SpriteTemplate gUnknown_845AFC0 = { .callback = SpriteCallbackDummy }; -const struct OamData gOamData_845AFD8 = { +static const struct OamData gOamData_845AFD8 = { .shape = SPRITE_SHAPE(8x16), .size = SPRITE_SIZE(8x16), .priority = 2 }; -const struct SpriteTemplate gUnknown_845AFE0 = { +static const struct SpriteTemplate gUnknown_845AFE0 = { .tileTag = 2, .paletteTag = 0, .oam = &gOamData_845AFD8, @@ -94,7 +94,7 @@ const struct SpriteTemplate gUnknown_845AFE0 = { .callback = sub_812B09C }; -const struct SpriteTemplate gUnknown_845AFF8 = { +static const struct SpriteTemplate gUnknown_845AFF8 = { .tileTag = 1, .paletteTag = 0, .oam = &gOamData_845AFD8, @@ -103,46 +103,46 @@ const struct SpriteTemplate gUnknown_845AFF8 = { .callback = sub_812B0D4 }; -const struct OamData gOamData_845B010 = { +static const struct OamData gOamData_845B010 = { .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .priority = 2 }; -const struct OamData gOamData_845B018 = { +static const struct OamData gOamData_845B018 = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 2 }; -const union AnimCmd gAnimCmd_845B020[] = { +static const union AnimCmd gAnimCmd_845B020[] = { ANIMCMD_FRAME(0x00, 2), ANIMCMD_END }; -const union AnimCmd gAnimCmd_845B028[] = { +static const union AnimCmd gAnimCmd_845B028[] = { ANIMCMD_FRAME(0x08, 2), ANIMCMD_END }; -const union AnimCmd gAnimCmd_845B030[] = { +static const union AnimCmd gAnimCmd_845B030[] = { ANIMCMD_FRAME(0x10, 2), ANIMCMD_END }; -const union AnimCmd gAnimCmd_845B038[] = { +static const union AnimCmd gAnimCmd_845B038[] = { ANIMCMD_FRAME(0x18, 2), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_845B040[] = { +static const union AnimCmd *const gSpriteAnimTable_845B040[] = { gAnimCmd_845B020, gAnimCmd_845B028, gAnimCmd_845B030, gAnimCmd_845B038 }; -const struct SpriteTemplate gUnknown_845B050 = { +static const struct SpriteTemplate gUnknown_845B050 = { .tileTag = 3, .paletteTag = 0, .oam = &gOamData_845B010, @@ -151,7 +151,7 @@ const struct SpriteTemplate gUnknown_845B050 = { .callback = SpriteCallbackDummy }; -const struct SpriteTemplate gUnknown_845B068 = { +static const struct SpriteTemplate gUnknown_845B068 = { .tileTag = 4, .paletteTag = 0, .oam = &gOamData_845B018, @@ -253,7 +253,7 @@ void sub_812B048(void) gUnknown_203B0E8->unk4 = &gSprites[spriteId]; } -void sub_812B09C(struct Sprite *sprite) +static void sub_812B09C(struct Sprite *sprite) { int var0 = sub_81297DC(); if (var0 == 15) @@ -267,7 +267,7 @@ void sub_812B09C(struct Sprite *sprite) } } -void sub_812B0D4(struct Sprite *sprite) +static void sub_812B0D4(struct Sprite *sprite) { if (++sprite->data[0] > 4) { From 0ebdbcfd5b1d352d37f5806943b124e915cbfe8b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 19:58:39 -0500 Subject: [PATCH 10/11] Document union room chat --- data/graphics.s | 8 +- include/global.h | 2 +- include/graphics.h | 8 +- include/link_rfu.h | 4 +- include/union_room_chat.h | 28 +- include/union_room_chat_display.h | 36 +- include/union_room_chat_objects.h | 22 +- src/link_rfu_2.c | 29 +- src/new_game.c | 2 +- src/union_room.c | 2 +- src/union_room_chat.c | 1132 +++++++++++++++-------------- src/union_room_chat_display.c | 747 ++++++++++--------- src/union_room_chat_objects.c | 228 +++--- 13 files changed, 1170 insertions(+), 1078 deletions(-) diff --git a/data/graphics.s b/data/graphics.s index cbc66ad4d..247a5d230 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16383,7 +16383,7 @@ gLinkMiscMenu_Gfx:: @ 8EA1720 gLinkMiscMenu_Tilemap:: @ 8EA1958 .incbin "graphics/interface/union_room_chat.bin.lz" -gUnknown_8EA1A50:: @ 8EA1A50 +gUnionRoomChatIcons:: @ 8EA1A50 .incbin "graphics/interface/union_room_chat_icons.4bpp.lz" .align 2 @@ -16508,13 +16508,13 @@ gTilesetPalettes_8EA9D88:: @ 8EA9D88 gTilesetTiles_8EA9F88:: @ 8EA9F88 .incbin "data/tilesets/secondary/82D4E6C/tiles.4bpp.lz" -gUnknown_8EAA9F0:: @ 8EAA9F0 +gUnionRoomChatPanelBgPal_7:: @ 8EAA9F0 .incbin "graphics/interface/union_room_chat_panel.gbapal" -gUnknown_8EAAA10:: @ 8EAAA10 +gUnionRoomChatPanelBgTiles:: @ 8EAAA10 .incbin "graphics/interface/union_room_chat_panel.4bpp.lz" -gUnknown_8EAAA6C:: @ 8EAAA6C +gUnionRoomChatPanelBgMap:: @ 8EAAA6C .incbin "graphics/interface/union_room_chat_panel.bin.lz" gCreditsMonBackdropPals:: @ 8EAAB18 diff --git a/include/global.h b/include/global.h index 3da77e307..9f46c2eee 100644 --- a/include/global.h +++ b/include/global.h @@ -775,7 +775,7 @@ struct SaveBlock1 /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1]; /*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS]; /*0x3A94*/ u8 filler3A94[0x40]; - /*0x3AD4*/ u8 unk3AD4[UNION_ROOM_KB_ROW_COUNT][21]; + /*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; /*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3C98*/ struct DaycareMon route5DayCareMon; /*0x3D24*/ u8 filler3D24[0x10]; diff --git a/include/graphics.h b/include/graphics.h index e77cd2502..467a1d461 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4865,14 +4865,14 @@ extern const u32 gBagBgPalette[]; extern const u32 gBagBgPalette_FemaleOverride[]; // union_room_chat_display -extern const u16 gUnknown_8EAA9F0[]; -extern const u32 gUnknown_8EAAA10[]; -extern const u32 gUnknown_8EAAA6C[]; +extern const u16 gUnionRoomChatPanelBgPal_7[]; +extern const u32 gUnionRoomChatPanelBgTiles[]; +extern const u32 gUnionRoomChatPanelBgMap[]; extern const u16 gLinkMiscMenu_Pal[]; extern const u32 gLinkMiscMenu_Gfx[]; extern const u32 gLinkMiscMenu_Tilemap[]; // union_room_chat_objects -extern const u32 gUnknown_8EA1A50[]; +extern const u32 gUnionRoomChatIcons[]; #endif //GUARD_GRAPHICS_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 8e4da4d87..81dd7fdf0 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -216,7 +216,7 @@ struct UnkRfuStruct_2 /* 0x99d */ u8 unk_ce5; /* 0x99e */ u8 unk_ce6; /* 0x99f */ u8 unk_ce7; - /* 0x9a0 */ u8 unk_ce8; + /* 0x9a0 */ bool8 unk_ce8; /* 0x9a1 */ u8 unk_ce9; /* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX]; /* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX]; @@ -325,7 +325,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx); bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx); -bool32 sub_80FBA1C(void); +bool32 GetRfuUnkCE8(void); void sub_80FA4A8(void); void sub_80FB9D0(void); void sub_80FB030(u32 a0); diff --git a/include/union_room_chat.h b/include/union_room_chat.h index 13e51289e..3ce78b210 100644 --- a/include/union_room_chat.h +++ b/include/union_room_chat.h @@ -11,20 +11,20 @@ enum extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT]; -void sub_8128420(void); -u8 *sub_81294B0(int arg0); -void sub_8129700(u8 *arg0, u8 *arg1); -u8 *sub_8129714(void); -int sub_8129720(void); -void sub_8129730(u32 *a0, u32 *a1); -u8 *sub_8129758(void); -u16 sub_8129788(void); -u8 *sub_81297C4(void); -u16 sub_81297D0(void); -int sub_81297DC(void); -int sub_81297E8(void); -u8 *sub_8129814(void); -void copy_strings_to_sav1(void); +void EnterUnionRoomChat(void); +u8 *UnionRoomChat_GetWorkRegisteredText(int arg0); +void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp); +u8 *UnionRoomChat_GetMessageEntryBuffer(void); +int UnionRoomChat_LenMessageEntryBuffer(void); +void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp); +u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void); +u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void); +u8 *UnionRoomChat_GetLastReceivedMessage(void); +u16 UnionRoomChat_GetReceivedPlayerIndex(void); +int UnionRoomChat_GetMessageEntryCursorPosition(void); +int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void); +u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void); +void UnionRoomChat_InitializeRegisteredTexts(void); u8 GetCurrentKeyboardPage(void); #endif // GUARD_UNION_ROOM_CHAT_H diff --git a/include/union_room_chat_display.h b/include/union_room_chat_display.h index 597296869..f880eeecb 100644 --- a/include/union_room_chat_display.h +++ b/include/union_room_chat_display.h @@ -1,12 +1,34 @@ #ifndef GUARD_UNION_ROOM_CHAT_DISPLAY_H #define GUARD_UNION_ROOM_CHAT_DISPLAY_H -bool8 sub_8129B14(void); -bool32 sub_8129B78(void); -void sub_8129B88(void); -void sub_8129BFC(void); -void sub_8129C34(u16 a0, u8 a1); -u8 sub_8129C8C(u8 a0); -s8 sub_812A568(void); +#define CHATDISPLAYROUTINE_LOADGFX 0 +#define CHATDISPLAYROUTINE_MOVEKBCURSOR 1 +#define CHATDISPLAYROUTINE_CURSORBLINK 2 +#define CHATDISPLAYROUTINE_SHOWKBSWAPMENU 3 +#define CHATDISPLAYROUTINE_HIDEKBSWAPMENU 4 +#define CHATDISPLAYROUTINE_SWITCHPAGES 5 +#define CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG 6 +#define CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO 7 +#define CHATDISPLAYROUTINE_PRINTMSG 8 +#define CHATDISPLAYROUTINE_PRINTREGISTERWHERE 9 +#define CHATDISPLAYROUTINE_CANCELREGISTER 10 +#define CHATDISPLAYROUTINE_RETURNTOKB 11 +#define CHATDISPLAYROUTINE_SCROLLCHAT 12 +#define CHATDISPLAYROUTINE_PRINTINPUTTEXT 13 +#define CHATDISPLAYROUTINE_ASKSAVE 14 +#define CHATDISPLAYROUTINE_ASKOVERWRITESAVE 15 +#define CHATDISPLAYROUTINE_PRINTSAVING 16 +#define CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME 17 +#define CHATDISPLAYROUTINE_PRINTEXITINGCHAT 18 +#define CHATDISPLAYROUTINE_PRINTLEADERLEFT 19 +#define CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG 20 + +bool8 UnionRoomChat_TryAllocGraphicsWork(void); +bool32 UnionRoomChat_RunDisplaySubtask0(void); +void UnionRoomChat_FreeGraphicsWork(void); +void UnionRoomChat_RunDisplaySubtasks(void); +void UnionRoomChat_StartDisplaySubtask(u16 a0, u8 a1); +u8 RunDisplaySubtask(u8 a0); +s8 UnionRoomChat_ProcessInput(void); #endif //GUARD_UNION_ROOM_CHAT_DISPLAY_H diff --git a/include/union_room_chat_objects.h b/include/union_room_chat_objects.h index 38c94b668..879f9f86b 100644 --- a/include/union_room_chat_objects.h +++ b/include/union_room_chat_objects.h @@ -1,16 +1,16 @@ #ifndef GUARD_UNION_ROOM_CHAT_OBJECTS_H #define GUARD_UNION_ROOM_CHAT_OBJECTS_H -bool32 sub_812AE70(void); -void sub_812AEB0(void); -void sub_812AEC8(void); -void sub_812AEFC(bool32 invisible); -void sub_812AF1C(void); -void sub_812AF8C(u32 idx); -void sub_812AFC0(void); -bool32 sub_812AFFC(void); -void sub_812B048(void); -void sub_812B100(void); -void sub_812B160(void); +bool32 UnionRoomChat_TryAllocSpriteWork(void); +void UnionRoomChat_FreeSpriteWork(void); +void UnionRoomChat_CreateSelectorCursorObj(void); +void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible); +void UnionRoomChat_MoveSelectorCursorObj(void); +void UnionRoomChat_UpdateObjPalCycle(u32 idx); +void UnionRoomChat_SetSelectorCursorClosedImage(void); +bool32 UnionRoomChat_AnimateSelectorCursorReopen(void); +void UnionRoomChat_SpawnTextEntryPointerSprites(void); +void CreatePageSwitchUISprites(void); +void UpdateVisibleUnionRoomChatIcon(void); #endif //GUARD_UNION_ROOM_CHAT_OBJECTS_H diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 4d1917789..a27948650 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -448,7 +448,7 @@ static void sub_80F8B34(u8 taskId) gTasks[taskId].data[1] = 8; Rfu.unk_0c = 1; CreateTask(sub_80FA834, 5); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; DestroyTask(taskId); break; } @@ -1337,7 +1337,7 @@ static void sub_80FA1C4(void) static void sub_80FA224(void) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !Rfu.unk_ce8) { sub_80F9D04(0x5f00); Rfu.RfuFunc = sub_80FA1C4; @@ -1620,7 +1620,7 @@ static void sub_80FA834(u8 taskId) if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) { - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; DestroyTask(taskId); } switch (gTasks[taskId].data[0]) @@ -1681,7 +1681,7 @@ static void sub_80FA834(u8 taskId) case 6: DestroyTask(taskId); gReceivedRemoteLinkPlayers = 1; - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; sub_80FEA34(1, 0x258); if (Rfu.unk_ce6) { @@ -1740,7 +1740,7 @@ static void sub_80FAA94(u8 taskId) u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]]; if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) { - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; DestroyTask(taskId); } switch (gTasks[taskId].data[0]) @@ -1790,7 +1790,7 @@ static void sub_80FAA94(u8 taskId) { CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14)); ResetBlockReceivedFlag(0); - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; if (Rfu.unk_ce6) { for (i = 0; i < RFU_CHILD_MAX; i++) @@ -1799,7 +1799,7 @@ static void sub_80FAA94(u8 taskId) { Rfu.unk_ce5 = 1 << i; Rfu.unk_ce6 ^= (1 << i); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; break; } } @@ -1948,7 +1948,7 @@ void sub_80FB008(u8 a0, u32 a1, u32 a2) rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } -void sub_80FB030(u32 a0) +void sub_80FB030(u32 linkPlayerCount) { s32 i; u32 r5; @@ -1964,9 +1964,10 @@ void sub_80FB030(u32 a0) { if ((r8 >> i) & 1) { - r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3)); + r7 |= (( + 0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3)); r5++; - if (r5 == a0 - 1) + if (r5 == linkPlayerCount - 1) break; } } @@ -2214,11 +2215,11 @@ static void sub_80FB5EC(u8 a0, u8 unused1) if (idx != 0) { r1 = 1 << sub_80F886C(idx); - if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0) + if (Rfu.unk_ce6 == 0 && !Rfu.unk_ce8) { Rfu.unk_ce5 = r1; Rfu.unk_ce6 |= (r1 ^ idx); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; } else { @@ -2360,7 +2361,7 @@ bool32 sub_80FBA00(void) return FALSE; } -bool32 sub_80FBA1C(void) +bool32 GetRfuUnkCE8(void) { return Rfu.unk_ce8; } @@ -2534,7 +2535,7 @@ void sub_80FBD6C(u32 a0) static void sub_80FBDB8(u8 taskId) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !Rfu.unk_ce8) { sub_80F9D04(0xED00); gSendCmd[1] = gTasks[taskId].data[0]; diff --git a/src/new_game.c b/src/new_game.c index 7428563de..05fb9c83e 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -143,7 +143,7 @@ void NewGameInitData(void) sub_809C794(); InitEasyChatPhrases(); ResetTrainerFanClub(); - copy_strings_to_sav1(); + UnionRoomChat_InitializeRegisteredTexts(); ResetMiniGamesResults(); sub_8143D24(); SetAllRenewableItemFlags(); diff --git a/src/union_room.c b/src/union_room.c index 6be88e2dd..f942fb7d3 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1852,7 +1852,7 @@ static void sub_81175BC(u8 taskId) sub_80F8D14(); SetHostRFUtgtGname(69, 0, 1); } - sub_8128420(); + EnterUnionRoomChat(); break; case 8: case 72: diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 751e5c865..f4a192b35 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -18,82 +18,107 @@ #include "data_8479668.h" #include "constants/songs.h" +#define MESSAGE_BUFFER_NCHAR 15 + +#define CHAT_MESSAGE_0 0 +#define CHAT_MESSAGE_CHAT 1 +#define CHAT_MESSAGE_JOIN 2 +#define CHAT_MESSAGE_LEAVE 3 +#define CHAT_MESSAGE_DROP 4 +#define CHAT_MESSAGE_DISBAND 5 + +#define CHATENTRYROUTINE_JOIN 0 +#define CHATNETRYROUTINE_HANDLE_INPUT 1 +#define CHATENTRYROUTINE_SWITCH 2 +#define CHATENTRYROUTINE_ASKQUITCHATTING 3 +#define CHATENTRYROUTINE_SEND 4 +#define CHATENTRYROUTINE_REGISTER 5 +#define CHATENTRYROUTINE_EXITCHAT 6 +#define CHATENTRYROUTINE_DROP 7 +#define CHATENTRYROUTINE_DISBANDED 8 +#define CHATENTRYROUTINE_SAVEANDEXIT 9 + +#define CHATEXIT_NONE 0 +#define CHATEXIT_LEADER_LAST 1 +#define CHATEXIT_DROPPED 2 +#define CHATEXIT_DISBANDED 3 + struct UnionRoomChat { u8 filler0[0x4]; - u16 unk4; - u16 unk6; + u16 routineNo; + u16 routineState; u8 filler8[0x2]; - u16 unkA; + u16 exitDelayTimer; u8 fillerC[0x1]; - u8 unkD; - u8 unkE; - u8 unkF; + u8 linkPlayerCount; + u8 handleInputTask; + u8 receiveMessagesTask; u8 currentPage; - u8 unk11; + u8 currentCol; u8 currentRow; - u8 unk13; - u8 unk14; - u8 unk15; - u8 unk16; - u8 unk17; - u8 unk18; - u8 unk19; - u8 unk1A[0x1F]; - u8 unk39[0x40]; - u8 unk79[0x40]; - u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21]; + u8 multiplayerId; + u8 lastBufferCursorPos; + u8 bufferCursorPos; + u8 receivedPlayerIndex; + u8 exitType; + bool8 changedRegisteredTexts; + u8 afterSaveTimer; + u8 messageEntryBuffer[2 * MESSAGE_BUFFER_NCHAR + 1]; + u8 receivedMessage[0x40]; + u8 hostName[0x40]; + u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; u8 filler18B[0x5]; - u8 unk190[0x28]; + u8 sendMessageBuffer[0x28]; }; -static EWRAM_DATA struct UnionRoomChat * gUnknown_203B0E0 = NULL; +static EWRAM_DATA struct UnionRoomChat * sWork = NULL; -static void sub_812845C(struct UnionRoomChat * unionRoomChat); -static void c2_081284E0(void); -static void sub_81285B4(void); -static void sub_81285CC(void); -static void sub_81285E8(u8 taskId); -static void sub_8128640(void); -static void sub_81286C4(void); -static void sub_81287B4(void); -static void sub_81288D4(void); -static void sub_8128AA0(void); -static void sub_8128C04(void); -static void sub_8128CA8(void); -static void sub_8128DA4(void); -static void sub_8128E78(void); -static void sub_8128FB8(void); -static void sub_8129218(u16 a0); -static bool32 sub_8129228(void); -static void sub_81292D8(void); -static void sub_81293AC(void); -static void sub_81293D8(void); -static bool32 sub_8129408(void); -static void sub_8129424(void); -static void sub_8129454(void); -static void sub_8129470(void); -static u8 *sub_81294C8(void); -static u8 *sub_81294EC(void); -static void sub_8129560(u8 *ptr); -static void sub_8129568(u8 *ptr); -static void sub_8129590(u8 *ptr); -static void sub_81295C0(u8 *ptr); -static void sub_81295EC(u8 *ptr); -static void sub_8129614(u8 *ptr); -static void sub_81298F8(u8 taskId); +static void InitChatWork(struct UnionRoomChat * unionRoomChat); +static void CB2_LoadInterface(void); +static void VBlankCB_UnionRoomChatMain(void); +static void CB2_UnionRoomChatMain(void); +static void Task_HandlePlayerInput(u8 taskId); +static void ChatEntryRoutine_Join(void); +static void ChatEntryRoutine_HandleInput(void); +static void ChatEntryRoutine_Switch(void); +static void ChatEntryRoutine_AskQuitChatting(void); +static void ChatEntryRoutine_ExitChat(void); +static void ChatEntryRoutine_Drop(void); +static void ChatEntryRoutine_Disbanded(void); +static void ChatEntryRoutine_SendMessage(void); +static void ChatEntryRoutine_Register(void); +static void ChatEntryRoutine_SaveAndExit(void); +static void GoToRoutine(u16 routineNo); +static bool32 TypeChatMessage_HandleDPad(void); +static void AppendCharacterToChatMessageBuffer(void); +static void DeleteLastCharacterOfChatMessageBuffer(void); +static void ToggleCaseOfLastCharacterInChatMessageBuffer(void); +static bool32 ChatMsgHasAtLeastOneCharcter(void); +static void RegisterTextAtRow(void); +static void ResetMessageEntryBuffer(void); +static void SaveRegisteredTextsToSB1(void); +static u8 *GetEndOfUnk1A(void); +static u8 *GetPtrToLastCharOfUnk1A(void); +static void PrepareSendBuffer_Null(u8 *ptr); +static void PrepareSendBuffer_Join(u8 *ptr); +static void PrepareSendBuffer_Chat(u8 *ptr); +static void PrepareSendBuffer_Leave(u8 *ptr); +static void PrepareSendBuffer_Drop(u8 *ptr); +static void PrepareSendBuffer_Disband(u8 *ptr); +static void Task_ReceiveChatMessage(u8 taskId); -static void (*const gUnknown_845A880[])(void) = { - sub_8128640, - sub_81286C4, - sub_81287B4, - sub_81288D4, - sub_8128DA4, - sub_8128E78, - sub_8128AA0, - sub_8128C04, - sub_8128CA8, - sub_8128FB8 +static void (*const sChatEntryRoutines[])(void) = { + [CHATENTRYROUTINE_JOIN] = ChatEntryRoutine_Join, + [CHATNETRYROUTINE_HANDLE_INPUT] = ChatEntryRoutine_HandleInput, + [CHATENTRYROUTINE_SWITCH] = ChatEntryRoutine_Switch, + [CHATENTRYROUTINE_ASKQUITCHATTING] = ChatEntryRoutine_AskQuitChatting, + [CHATENTRYROUTINE_SEND] = ChatEntryRoutine_SendMessage, + [CHATENTRYROUTINE_REGISTER] = ChatEntryRoutine_Register, + [CHATENTRYROUTINE_EXITCHAT] = ChatEntryRoutine_ExitChat, + [CHATENTRYROUTINE_DROP] = ChatEntryRoutine_Drop, + [CHATENTRYROUTINE_DISBANDED] = ChatEntryRoutine_Disbanded, + [CHATENTRYROUTINE_SAVEANDEXIT] = ChatEntryRoutine_SaveAndExit }; static const u8 sKeyboardPageMaxRow[] = @@ -104,39 +129,39 @@ static const u8 sKeyboardPageMaxRow[] = 9 }; -static const u8 gUnknown_845A8AC[] = { - CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, - 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24, +static const u8 sCaseToggleTable[] = { + 0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, + 0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, - CHAR_SPACE, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, CHAR_SPACE, + 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x35, 0x36, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x53, 0x54, 0x55, 0x56, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, 0x6F, 0x5B, 0x5C, 0x5D, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - 0x03, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x5A, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x84, 0x85, 0x86, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - 0xA0, CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, - CHAR_7, CHAR_8, CHAR_9, CHAR_EXCL_MARK, CHAR_QUESTION_MARK, CHAR_PERIOD, CHAR_HYPHEN, 0xAF, - CHAR_ELLIPSIS, CHAR_DBL_QUOT_LEFT, CHAR_DBL_QUOT_RIGHT, CHAR_SGL_QUOT_LEFT, CHAR_SGL_QUOT_RIGHT, CHAR_MALE, CHAR_FEMALE, CHAR_CURRENCY, - CHAR_COMMA, CHAR_MULT_SIGN, CHAR_SLASH, CHAR_a, CHAR_b, CHAR_c, CHAR_d, CHAR_e, - CHAR_f, CHAR_g, CHAR_h, CHAR_i, CHAR_j, CHAR_k, CHAR_l, CHAR_m, - CHAR_n, CHAR_o, CHAR_p, CHAR_q, CHAR_r, CHAR_s, CHAR_t, CHAR_u, - CHAR_v, CHAR_w, CHAR_x, CHAR_y, CHAR_z, CHAR_A, CHAR_B, CHAR_C, - CHAR_D, CHAR_E, CHAR_F, CHAR_G, CHAR_H, CHAR_I, CHAR_J, CHAR_K, - CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, - CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y, CHAR_Z, 0xEF, - CHAR_COLON, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE + 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00, + 0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, + 0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, + 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, + 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, + 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD, + 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, + 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, + 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF, + 0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { @@ -178,46 +203,46 @@ const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_R } }; -void sub_8128420(void) +void EnterUnionRoomChat(void) { - gUnknown_203B0E0 = Alloc(sizeof(struct UnionRoomChat)); - sub_812845C(gUnknown_203B0E0); + sWork = Alloc(sizeof(struct UnionRoomChat)); + InitChatWork(sWork); gKeyRepeatStartDelay = 20; sub_812B4AC(); SetVBlankCallback(NULL); - SetMainCallback2(c2_081284E0); + SetMainCallback2(CB2_LoadInterface); } -static void sub_812845C(struct UnionRoomChat * unionRoomChat) +static void InitChatWork(struct UnionRoomChat * unionRoomChat) { int i; - unionRoomChat->unk4 = 0; - unionRoomChat->unk6 = 0; - unionRoomChat->currentPage = 0; - unionRoomChat->unk11 = 0; + unionRoomChat->routineNo = CHATENTRYROUTINE_JOIN; + unionRoomChat->routineState = 0; + unionRoomChat->currentPage = UNION_ROOM_KB_PAGE_UPPER; + unionRoomChat->currentCol = 0; unionRoomChat->currentRow = 0; - unionRoomChat->unk14 = 0; - unionRoomChat->unk15 = 0; - unionRoomChat->unk16 = 0; - unionRoomChat->unk1A[0] = EOS; - unionRoomChat->unkD = GetLinkPlayerCount(); - unionRoomChat->unk13 = GetMultiplayerId(); - unionRoomChat->unk17 = 0; - unionRoomChat->unk18 = 0; - sub_8129560(unionRoomChat->unk190); + unionRoomChat->lastBufferCursorPos = 0; + unionRoomChat->bufferCursorPos = 0; + unionRoomChat->receivedPlayerIndex = 0; + unionRoomChat->messageEntryBuffer[0] = EOS; + unionRoomChat->linkPlayerCount = GetLinkPlayerCount(); + unionRoomChat->multiplayerId = GetMultiplayerId(); + unionRoomChat->exitType = 0; + unionRoomChat->changedRegisteredTexts = FALSE; + PrepareSendBuffer_Null(unionRoomChat->sendMessageBuffer); for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) - StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3AD4[i]); + StringCopy(unionRoomChat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]); } -static void sub_81284BC(void) +static void FreeChatWork(void) { - DestroyTask(gUnknown_203B0E0->unkE); - DestroyTask(gUnknown_203B0E0->unkF); - Free(gUnknown_203B0E0); + DestroyTask(sWork->handleInputTask); + DestroyTask(sWork->receiveMessagesTask); + Free(sWork); } -static void c2_081284E0(void) +static void CB2_LoadInterface(void) { switch (gMain.state) { @@ -225,16 +250,16 @@ static void c2_081284E0(void) ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); - sub_8129B14(); + UnionRoomChat_TryAllocGraphicsWork(); gMain.state++; break; case 1: - sub_8129BFC(); - if (!sub_8129B78()) + UnionRoomChat_RunDisplaySubtasks(); + if (!UnionRoomChat_RunDisplaySubtask0()) { BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - SetVBlankCallback(sub_81285B4); + SetVBlankCallback(VBlankCB_UnionRoomChatMain); gMain.state++; } break; @@ -242,10 +267,10 @@ static void c2_081284E0(void) UpdatePaletteFade(); if (!gPaletteFade.active) { - SetMainCallback2(sub_81285CC); + SetMainCallback2(CB2_UnionRoomChatMain); SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL); - gUnknown_203B0E0->unkE = CreateTask(sub_81285E8, 8); - gUnknown_203B0E0->unkF = CreateTask(sub_81298F8, 7); + sWork->handleInputTask = CreateTask(Task_HandlePlayerInput, 8); + sWork->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7); LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(232, 150); } @@ -253,7 +278,7 @@ static void c2_081284E0(void) } } -static void sub_81285B4(void) +static void VBlankCB_UnionRoomChatMain(void) { TransferPlttBuffer(); LoadOam(); @@ -261,146 +286,146 @@ static void sub_81285B4(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void sub_81285CC(void) +static void CB2_UnionRoomChatMain(void) { RunTasks(); - sub_8129BFC(); + UnionRoomChat_RunDisplaySubtasks(); AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); } -static void sub_81285E8(u8 taskId) +static void Task_HandlePlayerInput(u8 taskId) { - switch (gUnknown_203B0E0->unk17) + switch (sWork->exitType) { - case 1: - sub_8129218(6); - gUnknown_203B0E0->unk17 = 0; + case CHATEXIT_LEADER_LAST: + GoToRoutine(CHATENTRYROUTINE_EXITCHAT); + sWork->exitType = CHATEXIT_NONE; break; - case 2: - sub_8129218(7); - gUnknown_203B0E0->unk17 = 0; + case CHATEXIT_DROPPED: + GoToRoutine(CHATENTRYROUTINE_DROP); + sWork->exitType = CHATEXIT_NONE; break; - case 3: - sub_8129218(8); - gUnknown_203B0E0->unk17 = 0; + case CHATEXIT_DISBANDED: + GoToRoutine(CHATENTRYROUTINE_DISBANDED); + sWork->exitType = CHATEXIT_NONE; break; } - gUnknown_845A880[gUnknown_203B0E0->unk4](); + sChatEntryRoutines[sWork->routineNo](); } -static void sub_8128640(void) +static void ChatEntryRoutine_Join(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - sub_8129568(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6++; + PrepareSendBuffer_Join(sWork->sendMessageBuffer); + sWork->routineState++; // fall through case 1: - if (IsLinkTaskFinished() && !sub_80FBA1C()) + if (IsLinkTaskFinished() && !GetRfuUnkCE8()) { - if (SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) - gUnknown_203B0E0->unk6++; + if (SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; } break; case 2: if (IsLinkTaskFinished()) - sub_8129218(1); + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } } -static void sub_81286C4(void) +static void ChatEntryRoutine_HandleInput(void) { bool8 var0, var1; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: if (JOY_NEW(START_BUTTON)) { - if (gUnknown_203B0E0->unk15) - sub_8129218(4); + if (sWork->bufferCursorPos) + GoToRoutine(CHATENTRYROUTINE_SEND); } else if (JOY_NEW(SELECT_BUTTON)) { - sub_8129218(2); + GoToRoutine(CHATENTRYROUTINE_SWITCH); } else if (JOY_REPT(B_BUTTON)) { - if (gUnknown_203B0E0->unk15) + if (sWork->bufferCursorPos) { - sub_81293AC(); - sub_8129C34(8, 0); - gUnknown_203B0E0->unk6 = 1; + DeleteLastCharacterOfChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState = 1; } else { - sub_8129218(3); + GoToRoutine(CHATENTRYROUTINE_ASKQUITCHATTING); } } else if (JOY_NEW(A_BUTTON)) { - sub_81292D8(); - sub_8129C34(8, 0); - sub_8129C34(2, 1); - gUnknown_203B0E0->unk6 = 1; + AppendCharacterToChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CURSORBLINK, 1); + sWork->routineState = 1; } else if (JOY_NEW(R_BUTTON)) { - if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) { - sub_81293D8(); - sub_8129C34(8, 0); - gUnknown_203B0E0->unk6 = 1; + ToggleCaseOfLastCharacterInChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState = 1; } else { - sub_8129218(5); + GoToRoutine(CHATENTRYROUTINE_REGISTER); } } - else if (sub_8129228()) + else if (TypeChatMessage_HandleDPad()) { - sub_8129C34(1, 0); - gUnknown_203B0E0->unk6 = 1; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0); + sWork->routineState = 1; } break; case 1: - var0 = sub_8129C8C(0); - var1 = sub_8129C8C(1); + var0 = RunDisplaySubtask(0); + var1 = RunDisplaySubtask(1); if (!var0 && !var1) - gUnknown_203B0E0->unk6 = 0; + sWork->routineState = 0; break; } } -static void sub_81287B4(void) +static void ChatEntryRoutine_Switch(void) { s16 input; - int var0; + int shouldSwitchPages; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - sub_8129C34(3, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWKBSWAPMENU, 0); + sWork->routineState++; break; case 1: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6++; + if (!RunDisplaySubtask(0)) + sWork->routineState++; break; case 2: input = Menu_ProcessInput(); switch (input) { default: - sub_8129C34(4, 0); - var0 = 1; - if (gUnknown_203B0E0->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) - var0 = 0; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); + shouldSwitchPages = 1; + if (sWork->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) + shouldSwitchPages = 0; break; case MENU_NOTHING_CHOSEN: if (JOY_NEW(SELECT_BUTTON)) @@ -410,507 +435,509 @@ static void sub_81287B4(void) } return; case MENU_B_PRESSED: - sub_8129C34(4, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); + sWork->routineState = 3; return; } - if (!var0) + if (!shouldSwitchPages) { - gUnknown_203B0E0->unk6 = 3; + sWork->routineState = 3; return; } - gUnknown_203B0E0->unk11 = 0; - gUnknown_203B0E0->currentRow = 0; - sub_8129C34(5, 1); - gUnknown_203B0E0->currentPage = input; - gUnknown_203B0E0->unk6 = 4; + sWork->currentCol = 0; + sWork->currentRow = 0; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SWITCHPAGES, 1); + sWork->currentPage = input; + sWork->routineState = 4; break; case 3: - if (!sub_8129C8C(0)) - sub_8129218(1); + // Wait Return To Prev Page + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; case 4: - if (!sub_8129C8C(0) && !sub_8129C8C(1)) - sub_8129218(1); + // Wait Page Switch + if (!RunDisplaySubtask(0) && !RunDisplaySubtask(1)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } } -static void sub_81288D4(void) +static void ChatEntryRoutine_AskQuitChatting(void) { s8 input; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - sub_8129C34(6, 0); - gUnknown_203B0E0->unk6 = 1; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, 0); + sWork->routineState = 1; break; case 1: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 2; + if (!RunDisplaySubtask(0)) + sWork->routineState = 2; break; case 2: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; break; case 0: - if (gUnknown_203B0E0->unk13 == 0) + if (sWork->multiplayerId == 0) { - sub_8129614(gUnknown_203B0E0->unk190); - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 9; + PrepareSendBuffer_Disband(sWork->sendMessageBuffer); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 9; } else { - sub_81295C0(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6 = 4; + PrepareSendBuffer_Leave(sWork->sendMessageBuffer); + sWork->routineState = 4; } break; } break; case 3: - if (!sub_8129C8C(0)) - sub_8129218(1); + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; case 9: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(20, 0); - gUnknown_203B0E0->unk6 = 10; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, 0); + sWork->routineState = 10; } break; case 10: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 8; + if (!RunDisplaySubtask(0)) + sWork->routineState = 8; break; case 8: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; break; case 0: sub_80FA4A8(); - sub_8129614(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6 = 4; + PrepareSendBuffer_Disband(sWork->sendMessageBuffer); + sWork->routineState = 4; break; } break; case 4: - if (IsLinkTaskFinished() && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) + if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) { - if (!gUnknown_203B0E0->unk13) - gUnknown_203B0E0->unk6 = 6; + if (sWork->multiplayerId == 0) + sWork->routineState = 6; else - gUnknown_203B0E0->unk6 = 5; + sWork->routineState = 5; } break; case 5: - if (!gReceivedRemoteLinkPlayers) + if (gReceivedRemoteLinkPlayers == 0) { - sub_8129218(9); + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); } break; } } -static void sub_8128AA0(void) +static void ChatEntryRoutine_ExitChat(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!FuncIsActiveTask(sub_81298F8)) + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState++; } break; case 1: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(18, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTEXITINGCHAT, 0); + sWork->routineState++; } break; case 2: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_81295EC(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6++; + PrepareSendBuffer_Drop(sWork->sendMessageBuffer); + sWork->routineState++; } break; case 3: - if (IsLinkTaskFinished() && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) - gUnknown_203B0E0->unk6++; + if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; break; case 4: - if ((GetBlockReceivedStatus() & 1) && !sub_80FBA1C()) - gUnknown_203B0E0->unk6++; + if ((GetBlockReceivedStatus() & 1) && !GetRfuUnkCE8()) + sWork->routineState++; break; case 5: - if (IsLinkTaskFinished() && !sub_80FBA1C()) + if (IsLinkTaskFinished() && !GetRfuUnkCE8()) { sub_800AAC0(); - gUnknown_203B0E0->unkA = 0; - gUnknown_203B0E0->unk6++; + sWork->exitDelayTimer = 0; + sWork->routineState++; } break; case 6: - if (gUnknown_203B0E0->unkA < 150) - gUnknown_203B0E0->unkA++; + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; if (!gReceivedRemoteLinkPlayers) - gUnknown_203B0E0->unk6++; + sWork->routineState++; break; case 7: - if (gUnknown_203B0E0->unkA >= 150) - sub_8129218(9); + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); else - gUnknown_203B0E0->unkA++; + sWork->exitDelayTimer++; break; } } -static void sub_8128C04(void) +static void ChatEntryRoutine_Drop(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!FuncIsActiveTask(sub_81298F8)) + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState++; } break; case 1: - if (!sub_8129C8C(0) && IsLinkTaskFinished() && !sub_80FBA1C()) + if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8()) { sub_800AAC0(); - gUnknown_203B0E0->unkA = 0; - gUnknown_203B0E0->unk6++; + sWork->exitDelayTimer = 0; + sWork->routineState++; } break; case 2: - if (gUnknown_203B0E0->unkA < 150) - gUnknown_203B0E0->unkA++; + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; if (!gReceivedRemoteLinkPlayers) - gUnknown_203B0E0->unk6++; + sWork->routineState++; break; case 3: - if (gUnknown_203B0E0->unkA >= 150) - sub_8129218(9); + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); else - gUnknown_203B0E0->unkA++; + sWork->exitDelayTimer++; break; } } -static void sub_8128CA8(void) +static void ChatEntryRoutine_Disbanded(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!FuncIsActiveTask(sub_81298F8)) + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) { - if (gUnknown_203B0E0->unk13) - sub_8129C34(7, 0); + if (sWork->multiplayerId) + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); - gUnknown_203B0E0->unk6++; + sWork->routineState++; } break; case 1: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - if (gUnknown_203B0E0->unk13) - sub_8129C34(19, 0); + if (sWork->multiplayerId != 0) + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTLEADERLEFT, 0); - gUnknown_203B0E0->unk6++; + sWork->routineState++; } break; case 2: - if (sub_8129C8C(0) != TRUE && IsLinkTaskFinished() && !sub_80FBA1C()) + if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8()) { sub_800AAC0(); - gUnknown_203B0E0->unkA = 0; - gUnknown_203B0E0->unk6++; + sWork->exitDelayTimer = 0; + sWork->routineState++; } break; case 3: - if (gUnknown_203B0E0->unkA < 150) - gUnknown_203B0E0->unkA++; + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; if (!gReceivedRemoteLinkPlayers) - gUnknown_203B0E0->unk6++; + sWork->routineState++; break; case 4: - if (gUnknown_203B0E0->unkA >= 150) - sub_8129218(9); + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); else - gUnknown_203B0E0->unkA++; + sWork->exitDelayTimer++; break; } } -static void sub_8128DA4(void) +static void ChatEntryRoutine_SendMessage(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: if (!gReceivedRemoteLinkPlayers) { - sub_8129218(1); + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } - sub_8129590(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6++; + PrepareSendBuffer_Chat(sWork->sendMessageBuffer); + sWork->routineState++; // fall through case 1: - if (IsLinkTaskFinished() == TRUE && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) - gUnknown_203B0E0->unk6++; + if (IsLinkTaskFinished() == TRUE && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; break; case 2: - sub_8129454(); - sub_8129C34(8, 0); - gUnknown_203B0E0->unk6++; + ResetMessageEntryBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState++; break; case 3: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6++; + if (!RunDisplaySubtask(0)) + sWork->routineState++; break; case 4: if (IsLinkTaskFinished()) - sub_8129218(1); + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } } -static void sub_8128E78(void) +static void ChatEntryRoutine_Register(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (sub_8129408()) + if (ChatMsgHasAtLeastOneCharcter()) { - sub_8129C34(9, 0); - gUnknown_203B0E0->unk6 = 2; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTREGISTERWHERE, 0); + sWork->routineState = 2; } else { - sub_8129C34(13, 0); - gUnknown_203B0E0->unk6 = 5; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTINPUTTEXT, 0); + sWork->routineState = 5; } break; case 1: if (JOY_NEW(A_BUTTON)) { - sub_8129424(); - sub_8129C34(11, 0); - gUnknown_203B0E0->unk6 = 3; + RegisterTextAtRow(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_RETURNTOKB, 0); + sWork->routineState = 3; } else if (JOY_NEW(B_BUTTON)) { - sub_8129C34(10, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0); + sWork->routineState = 4; } - else if (sub_8129228()) + else if (TypeChatMessage_HandleDPad()) { - sub_8129C34(1, 0); - gUnknown_203B0E0->unk6 = 2; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0); + sWork->routineState = 2; } break; case 2: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 1; + if (!RunDisplaySubtask(0)) + sWork->routineState = 1; break; case 3: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(10, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0); + sWork->routineState = 4; } break; case 4: - if (!sub_8129C8C(0)) - sub_8129218(1); + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; case 5: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 6; + if (!RunDisplaySubtask(0)) + sWork->routineState = 6; break; case 6: if (JOY_NEW(A_BUTTON | B_BUTTON)) { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 4; } break; } } -static void sub_8128FB8(void) +static void ChatEntryRoutine_SaveAndExit(void) { s8 input; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!gUnknown_203B0E0->unk18) + if (!sWork->changedRegisteredTexts) { - gUnknown_203B0E0->unk6 = 12; + sWork->routineState = 12; } else { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 1; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 1; } break; case 1: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(14, 0); - gUnknown_203B0E0->unk6 = 2; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKSAVE, 0); + sWork->routineState = 2; } break; case 2: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - gUnknown_203B0E0->unk6 = 12; + sWork->routineState = 12; break; case 0: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; break; } break; case 3: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(15, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKOVERWRITESAVE, 0); + sWork->routineState = 4; } break; case 4: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 5; + if (!RunDisplaySubtask(0)) + sWork->routineState = 5; break; case 5: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - gUnknown_203B0E0->unk6 = 12; + sWork->routineState = 12; break; case 0: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 6; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 6; break; } break; case 6: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(16, 0); - sub_8129470(); - gUnknown_203B0E0->unk6 = 7; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVING, 0); + SaveRegisteredTextsToSB1(); + sWork->routineState = 7; } break; case 7: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { SetContinueGameWarpStatusToDynamicWarp(); TrySavingData(SAVE_NORMAL); - gUnknown_203B0E0->unk6 = 8; + sWork->routineState = 8; } break; case 8: - sub_8129C34(17, 0); - gUnknown_203B0E0->unk6 = 9; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, 0); + sWork->routineState = 9; break; case 9: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { PlaySE(SE_SAVE); ClearContinueGameWarpStatus2(); - gUnknown_203B0E0->unk6 = 10; + sWork->routineState = 10; } break; case 10: - gUnknown_203B0E0->unk19 = 0; - gUnknown_203B0E0->unk6 = 11; + sWork->afterSaveTimer = 0; + sWork->routineState = 11; break; case 11: - gUnknown_203B0E0->unk19++; - if (gUnknown_203B0E0->unk19 > 120) - gUnknown_203B0E0->unk6 = 12; + sWork->afterSaveTimer++; + if (sWork->afterSaveTimer > 120) + sWork->routineState = 12; break; case 12: BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - gUnknown_203B0E0->unk6 = 13; + sWork->routineState = 13; break; case 13: if (!gPaletteFade.active) { sub_812B4B8(); - sub_8129B88(); - sub_81284BC(); + UnionRoomChat_FreeGraphicsWork(); + FreeChatWork(); SetMainCallback2(CB2_ReturnToField); } break; } } -static void sub_8129218(u16 arg0) +static void GoToRoutine(u16 routineNo) { - gUnknown_203B0E0->unk4 = arg0; - gUnknown_203B0E0->unk6 = 0; + sWork->routineNo = routineNo; + sWork->routineState = 0; } -static bool32 sub_8129228(void) +static bool32 TypeChatMessage_HandleDPad(void) { if (!(gMain.newAndRepeatedKeys & DPAD_UP)) { if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (gUnknown_203B0E0->currentRow < sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage]) - gUnknown_203B0E0->currentRow++; + if (sWork->currentRow < sKeyboardPageMaxRow[sWork->currentPage]) + sWork->currentRow++; else - gUnknown_203B0E0->currentRow = 0; + sWork->currentRow = 0; return TRUE; } - if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) { if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - if (gUnknown_203B0E0->unk11) - gUnknown_203B0E0->unk11--; + if (sWork->currentCol) + sWork->currentCol--; else - gUnknown_203B0E0->unk11 = 4; + sWork->currentCol = 4; } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - if (gUnknown_203B0E0->unk11 > 3) - gUnknown_203B0E0->unk11 = 0; + if (sWork->currentCol > 3) + sWork->currentCol = 0; else - gUnknown_203B0E0->unk11++; + sWork->currentCol++; } else { @@ -924,16 +951,16 @@ static bool32 sub_8129228(void) } else { - if (gUnknown_203B0E0->currentRow) - gUnknown_203B0E0->currentRow--; + if (sWork->currentRow) + sWork->currentRow--; else - gUnknown_203B0E0->currentRow = sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage]; + sWork->currentRow = sKeyboardPageMaxRow[sWork->currentPage]; return TRUE; } } -static void sub_81292D8(void) +static void AppendCharacterToChatMessageBuffer(void) { int i; const u8 *charsStr; @@ -941,10 +968,10 @@ static void sub_81292D8(void) u8 *str; u8 buffer[21]; - if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) { - charsStr = gUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow]; - for (i = 0; i < gUnknown_203B0E0->unk11; i++) + charsStr = gUnionRoomKeyboardText[sWork->currentPage][sWork->currentRow]; + for (i = 0; i < sWork->currentCol; i++) { if (*charsStr == CHAR_EXTRA_EMOJI) charsStr++; @@ -955,19 +982,19 @@ static void sub_81292D8(void) } else { - u8 *tempStr = StringCopy(buffer, gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow]); + u8 *tempStr = StringCopy(buffer, sWork->registeredTexts[sWork->currentRow]); tempStr[0] = CHAR_SPACE; tempStr[1] = EOS; charsStr = buffer; strLength = StringLength_Multibyte(buffer); } - gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; + sWork->lastBufferCursorPos = sWork->bufferCursorPos; if (!charsStr) return; - str = sub_81294C8(); - while (--strLength != -1 && gUnknown_203B0E0->unk15 < 15) + str = GetEndOfUnk1A(); + while (--strLength != -1 && sWork->bufferCursorPos < MESSAGE_BUFFER_NCHAR) { if (*charsStr == CHAR_EXTRA_EMOJI) { @@ -980,86 +1007,84 @@ static void sub_81292D8(void) charsStr++; str++; - gUnknown_203B0E0->unk15++; + sWork->bufferCursorPos++; } *str = EOS; } -static void sub_81293AC(void) +static void DeleteLastCharacterOfChatMessageBuffer(void) { - gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; - if (gUnknown_203B0E0->unk15) + sWork->lastBufferCursorPos = sWork->bufferCursorPos; + if (sWork->bufferCursorPos) { - u8 *str = sub_81294EC(); + u8 *str = GetPtrToLastCharOfUnk1A(); *str = EOS; - gUnknown_203B0E0->unk15--; + sWork->bufferCursorPos--; } } -static void sub_81293D8(void) +static void ToggleCaseOfLastCharacterInChatMessageBuffer(void) { u8 *str; u8 character; - gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15 - 1; - str = sub_81294EC(); + sWork->lastBufferCursorPos = sWork->bufferCursorPos - 1; + str = GetPtrToLastCharOfUnk1A(); if (*str != CHAR_EXTRA_EMOJI) { - character = gUnknown_845A8AC[*str]; + character = sCaseToggleTable[*str]; if (character) *str = character; } } -static bool32 sub_8129408(void) +static bool32 ChatMsgHasAtLeastOneCharcter(void) { - if (gUnknown_203B0E0->unk15) + if (sWork->bufferCursorPos) return TRUE; else return FALSE; } -static void sub_8129424(void) +static void RegisterTextAtRow(void) { - u8 *src = sub_8129758(); - StringCopy(gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow], src); - gUnknown_203B0E0->unk18 = 1; + u8 *src = UnionRoomChat_GetEndOfMessageEntryBuffer(); + StringCopy(sWork->registeredTexts[sWork->currentRow], src); + sWork->changedRegisteredTexts = TRUE; } -static void sub_8129454(void) +static void ResetMessageEntryBuffer(void) { - gUnknown_203B0E0->unk1A[0] = EOS; - gUnknown_203B0E0->unk14 = 15; - gUnknown_203B0E0->unk15 = 0; + sWork->messageEntryBuffer[0] = EOS; + sWork->lastBufferCursorPos = MESSAGE_BUFFER_NCHAR; + sWork->bufferCursorPos = 0; } -static void sub_8129470(void) +static void SaveRegisteredTextsToSB1(void) { int i; for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) - StringCopy(gSaveBlock1Ptr->unk3AD4[i], gUnknown_203B0E0->unkB9[i]); + StringCopy(gSaveBlock1Ptr->registeredTexts[i], sWork->registeredTexts[i]); } -u8 *sub_81294B0(int arg0) +u8 *UnionRoomChat_GetWorkRegisteredText(int arg0) { - return gUnknown_203B0E0->unkB9[arg0]; + return sWork->registeredTexts[arg0]; } -// GetEndOfUnk1A -static u8 *sub_81294C8(void) +static u8 *GetEndOfUnk1A(void) { - u8 *str = gUnknown_203B0E0->unk1A; + u8 *str = sWork->messageEntryBuffer; while (*str != EOS) str++; return str; } -// GetPtrToLastCharOfUnk1A -static u8 *sub_81294EC(void) +static u8 *GetPtrToLastCharOfUnk1A(void) { - u8 *str = gUnknown_203B0E0->unk1A; + u8 *str = sWork->messageEntryBuffer; u8 *str2 = str; while (*str != EOS) { @@ -1072,13 +1097,13 @@ static u8 *sub_81294EC(void) return str2; } -static u16 sub_812951C(void) +static u16 GetNumCharsInMessageEntryBuffer(void) { u8 *str; u32 i, numChars, strLength; - strLength = StringLength_Multibyte(gUnknown_203B0E0->unk1A); - str = gUnknown_203B0E0->unk1A; + strLength = StringLength_Multibyte(sWork->messageEntryBuffer); + str = sWork->messageEntryBuffer; numChars = 0; if (strLength > 10) { @@ -1096,83 +1121,83 @@ static u16 sub_812951C(void) return numChars; } -static void sub_8129560(u8 *arg0) +static void PrepareSendBuffer_Null(u8 *arg0) { - arg0[0] = 0; + arg0[0] = CHAT_MESSAGE_0; } -static void sub_8129568(u8 *arg0) +static void PrepareSendBuffer_Join(u8 *arg0) { - arg0[0] = 2; + arg0[0] = CHAT_MESSAGE_JOIN; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; } -static void sub_8129590(u8 *arg0) +static void PrepareSendBuffer_Chat(u8 *arg0) { - arg0[0] = 1; + arg0[0] = CHAT_MESSAGE_CHAT; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_203B0E0->unk1A); + StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], sWork->messageEntryBuffer); } -static void sub_81295C0(u8 *arg0) +static void PrepareSendBuffer_Leave(u8 *arg0) { - arg0[0] = 3; + arg0[0] = CHAT_MESSAGE_LEAVE; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; sub_80FB9D0(); } -static void sub_81295EC(u8 *arg0) +static void PrepareSendBuffer_Drop(u8 *arg0) { - arg0[0] = 4; + arg0[0] = CHAT_MESSAGE_DROP; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; } -static void sub_8129614(u8 *arg0) +static void PrepareSendBuffer_Disband(u8 *arg0) { - arg0[0] = 5; + arg0[0] = CHAT_MESSAGE_DISBAND; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; } -static bool32 sub_812963C(u8 *arg0, u8 *arg1) +static bool32 ProcessReceivedChatMessage(u8 *dest, u8 *recvMessage) { u8 *tempStr; - u8 var0 = *arg1; - u8 *str = arg1 + 1; - arg1 = str; - arg1 += 8; + u8 cmd = *recvMessage; + u8 *name = recvMessage + 1; + recvMessage = name; + recvMessage += PLAYER_NAME_LENGTH + 1; - switch (var0) + switch (cmd) { - case 2: - if (gUnknown_203B0E0->unk13 != str[8]) + case CHAT_MESSAGE_JOIN: + if (sWork->multiplayerId != name[PLAYER_NAME_LENGTH + 1]) { DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700JoinedChat); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700JoinedChat); return TRUE; } break; - case 1: - tempStr = StringCopy(arg0, str); + case CHAT_MESSAGE_CHAT: + tempStr = StringCopy(dest, name); *(tempStr++) = EXT_CTRL_CODE_BEGIN; *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO; *(tempStr++) = 42; *(tempStr++) = CHAR_COLON; - StringCopy(tempStr, arg1); + StringCopy(tempStr, recvMessage); return TRUE; - case 5: - StringCopy(gUnknown_203B0E0->unk79, str); + case CHAT_MESSAGE_DISBAND: + StringCopy(sWork->hostName, name); // fall through - case 3: - if (gUnknown_203B0E0->unk13 != *arg1) + case CHAT_MESSAGE_LEAVE: + if (sWork->multiplayerId != *recvMessage) { DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700LeftChat); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700LeftChat); return TRUE; } break; @@ -1183,47 +1208,47 @@ static bool32 sub_812963C(u8 *arg0, u8 *arg1) u8 GetCurrentKeyboardPage(void) { - return gUnknown_203B0E0->currentPage; + return sWork->currentPage; } -void sub_8129700(u8 *arg0, u8 *arg1) +void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp) { - *arg0 = gUnknown_203B0E0->unk11; - *arg1 = gUnknown_203B0E0->currentRow; + *colp = sWork->currentCol; + *rowp = sWork->currentRow; } -u8 *sub_8129714(void) +u8 *UnionRoomChat_GetMessageEntryBuffer(void) { - return gUnknown_203B0E0->unk1A; + return sWork->messageEntryBuffer; } -int sub_8129720(void) +int UnionRoomChat_LenMessageEntryBuffer(void) { - u8 *str = sub_8129714(); + u8 *str = UnionRoomChat_GetMessageEntryBuffer(); return StringLength_Multibyte(str); } -void sub_8129730(u32 *arg0, u32 *arg1) +void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp) { - int diff = gUnknown_203B0E0->unk15 - gUnknown_203B0E0->unk14; + int diff = sWork->bufferCursorPos - sWork->lastBufferCursorPos; if (diff < 0) { diff *= -1; - *arg0 = gUnknown_203B0E0->unk15; + *startp = sWork->bufferCursorPos; } else { - *arg0 = gUnknown_203B0E0->unk14; + *startp = sWork->lastBufferCursorPos; } - *arg1 = diff; + *diffp = diff; } -u8 *sub_8129758(void) +u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void) { int i; - u16 numChars = sub_812951C(); - u8 *str = gUnknown_203B0E0->unk1A; + u16 numChars = GetNumCharsInMessageEntryBuffer(); + u8 *str = sWork->messageEntryBuffer; for (i = 0; i < numChars; i++) { if (*str == CHAR_EXTRA_EMOJI) @@ -1235,12 +1260,13 @@ u8 *sub_8129758(void) return str; } -u16 sub_8129788(void) +// Useless overhead +u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void) { u16 count; u32 i; - u16 numChars = sub_812951C(); - u8 *str = gUnknown_203B0E0->unk1A; + u16 numChars = GetNumCharsInMessageEntryBuffer(); + u8 *str = sWork->messageEntryBuffer; for (count = 0, i = 0; i < numChars; count++, i++) { if (*str == CHAR_EXTRA_EMOJI) @@ -1252,56 +1278,64 @@ u16 sub_8129788(void) return count; } -u8 *sub_81297C4(void) +u8 *UnionRoomChat_GetLastReceivedMessage(void) { - return gUnknown_203B0E0->unk39; + return sWork->receivedMessage; } -u16 sub_81297D0(void) +u16 UnionRoomChat_GetReceivedPlayerIndex(void) { - return gUnknown_203B0E0->unk16; + return sWork->receivedPlayerIndex; } -int sub_81297DC(void) +int UnionRoomChat_GetMessageEntryCursorPosition(void) { - return gUnknown_203B0E0->unk15; + return sWork->bufferCursorPos; } -int sub_81297E8(void) +// This probably does more in the Japanese titles. +int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void) { - u8 *str = sub_81294EC(); + u8 *str = GetPtrToLastCharOfUnk1A(); u32 character = *str; - if (character > 0xFF || gUnknown_845A8AC[character] == character || gUnknown_845A8AC[character] == 0) + if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0) return 3; else return 0; } -u8 *sub_8129814(void) +u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void) { - return gUnknown_203B0E0->unk79; + return sWork->hostName; } -void copy_strings_to_sav1(void) +void UnionRoomChat_InitializeRegisteredTexts(void) { - StringCopy(gSaveBlock1Ptr->unk3AD4[0], gText_Hello); - StringCopy(gSaveBlock1Ptr->unk3AD4[1], gText_Pokemon2); - StringCopy(gSaveBlock1Ptr->unk3AD4[2], gText_Trade); - StringCopy(gSaveBlock1Ptr->unk3AD4[3], gText_Battle); - StringCopy(gSaveBlock1Ptr->unk3AD4[4], gText_Lets); - StringCopy(gSaveBlock1Ptr->unk3AD4[5], gText_Ok); - StringCopy(gSaveBlock1Ptr->unk3AD4[6], gText_Sorry); - StringCopy(gSaveBlock1Ptr->unk3AD4[7], gText_YaySmileEmoji); - StringCopy(gSaveBlock1Ptr->unk3AD4[8], gText_ThankYou); - StringCopy(gSaveBlock1Ptr->unk3AD4[9], gText_ByeBye); + StringCopy(gSaveBlock1Ptr->registeredTexts[0], gText_Hello); + StringCopy(gSaveBlock1Ptr->registeredTexts[1], gText_Pokemon2); + StringCopy(gSaveBlock1Ptr->registeredTexts[2], gText_Trade); + StringCopy(gSaveBlock1Ptr->registeredTexts[3], gText_Battle); + StringCopy(gSaveBlock1Ptr->registeredTexts[4], gText_Lets); + StringCopy(gSaveBlock1Ptr->registeredTexts[5], gText_Ok); + StringCopy(gSaveBlock1Ptr->registeredTexts[6], gText_Sorry); + StringCopy(gSaveBlock1Ptr->registeredTexts[7], gText_YaySmileEmoji); + StringCopy(gSaveBlock1Ptr->registeredTexts[8], gText_ThankYou); + StringCopy(gSaveBlock1Ptr->registeredTexts[9], gText_ByeBye); } -static void sub_81298F8(u8 taskId) +#define tState data[0] +#define tI data[1] +#define tCurrLinkPlayer data[2] +#define tBlockReceivedStatus data[3] +#define tLinkPlayerCount data[4] +#define tNextState data[5] + +static void Task_ReceiveChatMessage(u8 taskId) { u8 *buffer; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: if (!gReceivedRemoteLinkPlayers) @@ -1310,98 +1344,110 @@ static void sub_81298F8(u8 taskId) return; } - data[0] = 1; + tState = 1; // fall through case 1: - data[4] = GetLinkPlayerCount(); - if (gUnknown_203B0E0->unkD != data[4]) + tLinkPlayerCount = GetLinkPlayerCount(); + if (sWork->linkPlayerCount != tLinkPlayerCount) { - data[0] = 2; - gUnknown_203B0E0->unkD = data[4]; + tState = 2; + sWork->linkPlayerCount = tLinkPlayerCount; return; } - data[3] = GetBlockReceivedStatus(); - if (!data[3] && sub_80FBA1C()) + tBlockReceivedStatus = GetBlockReceivedStatus(); + if (!tBlockReceivedStatus && GetRfuUnkCE8()) return; - data[1] = 0; - data[0] = 3; + tI = 0; + tState = 3; // fall through case 3: - for (; data[1] < 5 && ((data[3] >> data[1]) & 1) == 0; data[1]++) + // Idle listen + for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) ; - if (data[1] == 5) + if (tI == 5) { - data[0] = 1; + tState = 1; return; } - data[2] = data[1]; - ResetBlockReceivedFlag(data[2]); - buffer = (u8 *)gBlockRecvBuffer[data[1]]; + tCurrLinkPlayer = tI; + ResetBlockReceivedFlag(tCurrLinkPlayer); + buffer = (u8 *)gBlockRecvBuffer[tI]; switch (buffer[0]) { default: - case 1: data[5] = 3; break; - case 2: data[5] = 3; break; - case 3: data[5] = 4; break; - case 4: data[5] = 5; break; - case 5: data[5] = 6; break; + case CHAT_MESSAGE_CHAT: tNextState = 3; break; + case CHAT_MESSAGE_JOIN: tNextState = 3; break; + case CHAT_MESSAGE_LEAVE: tNextState = 4; break; + case CHAT_MESSAGE_DROP: tNextState = 5; break; + case CHAT_MESSAGE_DISBAND: tNextState = 6; break; } - if (sub_812963C(gUnknown_203B0E0->unk39, (u8 *)gBlockRecvBuffer[data[1]])) + if (ProcessReceivedChatMessage(sWork->receivedMessage, (u8 *)gBlockRecvBuffer[tI])) { - gUnknown_203B0E0->unk16 = data[1]; - sub_8129C34(12, 2); - data[0] = 7; + sWork->receivedPlayerIndex = tI; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SCROLLCHAT, 2); + tState = 7; } else { - data[0] = data[5]; + tState = tNextState; } - data[1]++; + tI++; break; case 7: - if (!sub_8129C8C(2)) - data[0] = data[5]; + if (!RunDisplaySubtask(2)) + tState = tNextState; break; case 4: - if (!gUnknown_203B0E0->unk13 && data[2]) + // Someone is leaving + if (sWork->multiplayerId == 0 && tCurrLinkPlayer != 0) { + // You're the leader, and the person who left is not you if (GetLinkPlayerCount() == 2) { sub_80FA4A8(); - gUnknown_203B0E0->unk17 = 1; + sWork->exitType = CHATEXIT_LEADER_LAST; DestroyTask(taskId); return; } - sub_80FBD6C(data[2]); + sub_80FBD6C(tCurrLinkPlayer); } - data[0] = 3; + tState = 3; break; case 5: - if (gUnknown_203B0E0->unk13) - gUnknown_203B0E0->unk17 = 2; + // Person left + if (sWork->multiplayerId != 0) + sWork->exitType = CHATEXIT_DROPPED; DestroyTask(taskId); break; case 6: - gUnknown_203B0E0->unk17 = 3; + // The leader disbanded the chat + sWork->exitType = CHATEXIT_DISBANDED; DestroyTask(taskId); break; case 2: - if (!sub_80FBA1C()) + if (!GetRfuUnkCE8()) { - if (!gUnknown_203B0E0->unk13) - sub_80FB030(gUnknown_203B0E0->unkD); + if (sWork->multiplayerId == 0) + sub_80FB030(sWork->linkPlayerCount); - data[0] = 1; + tState = 1; } break; } } + +#undef tNextState +#undef tLinkPlayerCount +#undef tBlockReceivedStatus +#undef tCurrLinkPlayer +#undef tI +#undef tState diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index 4bd4be8fe..f43e40368 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -11,6 +11,18 @@ #include "union_room_chat_display.h" #include "union_room_chat_objects.h" +#define STDMESSAGE_QUIT_CHATTING 0 +#define STDMESSAGE_REGISTER_WHERE 1 +#define STDMESSAGE_REGISTER_HERE 2 +#define STDMESSAGE_INPUT_TEXT 3 +#define STDMESSAGE_EXITING_CHAT 4 +#define STDMESSAGE_LEADER_LEFT 5 +#define STDMESSAGE_ASK_SAVE 6 +#define STDMESSAGE_ASK_OVERWRITE 7 +#define STDMESSAGE_SAVING_NO_OFF 8 +#define STDMESSAGE_SAVED_THE_GAME 9 +#define STDMESSAGE_WARN_LEADER_LEAVE 10 + struct UnionRoomChat2Subtask { bool32 (*callback)(u8 *); @@ -21,9 +33,9 @@ struct UnionRoomChat2Subtask struct UnionRoomChat2 { struct UnionRoomChat2Subtask subtasks[3]; - u16 unk18; - u16 unk1A; - u16 unk1C; + u16 yesNoMenuWinId; + u16 curLine; + u16 scrollCount; u16 messageWindowId; s16 bg1hofs; u8 expandedPlaceholdersBuffer[0x106]; @@ -35,13 +47,13 @@ struct UnionRoomChat2 u8 unk2148[0x20]; }; -struct Unk845AABC +struct SubtaskInfo { u16 idx; bool32 (*callback)(u8 *); }; -struct Unk845AB64 +struct MessageWindowInfo { const u8 *text; bool8 boxType; @@ -53,63 +65,63 @@ struct Unk845AB64 bool8 widerBox; }; -static EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; +static EWRAM_DATA struct UnionRoomChat2 * sWork = NULL; -static void sub_8129BB8(struct UnionRoomChat2 * ptr); -static void sub_8129BC4(void); -static bool32 sub_8129CA0(u8 *state); -static bool32 sub_8129D40(u8 *state); -static bool32 sub_8129D78(u8 *state); -static bool32 sub_8129DB0(u8 *state); -static bool32 sub_8129E1C(u8 *state); -static bool32 sub_8129E28(u8 *state); -static bool32 sub_8129E74(u8 *state); -static bool32 sub_8129EB8(u8 *state); -static bool32 sub_8129F24(u8 *state); -static bool32 sub_8129FCC(u8 *state); -static bool32 sub_812A074(u8 *state); -static bool32 sub_812A0B0(u8 *state); -static bool32 sub_812A18C(u8 *state); -static bool32 sub_812A1B8(u8 *state); -static bool32 sub_812A1FC(u8 *state); -static bool32 sub_812A240(u8 *state); -static bool32 sub_812A294(u8 *state); -static bool32 sub_812A2E4(u8 *state); -static bool32 sub_812A334(u8 *state); -static bool32 sub_812A378(u8 *state); -static bool32 sub_812A3D0(u8 *state); -static bool32 sub_812A420(u8 *state); -static void sub_812A424(u8 a0, u8 a1, u8 a2); -static void sub_812A51C(void); -static void sub_812A544(void); -static void sub_812A578(int a0, u16 a1); -static void sub_812A6F4(void); -static void sub_812A728(void); -static void sub_812A74C(u16 a0, u16 a1, u8 a2); -static void sub_812A778(u16 a0, u8 *a1, u8 a2, u8 a3, u8 a4); -static void sub_812A804(void); -static bool32 sub_812A980(void); -static bool32 sub_812A9C8(void); -static void sub_812AA10(void); -static void sub_812AA64(void); -static void sub_812AA78(u16 a0, u8 *a1, u8 a2); -static void sub_812AAD4(void); -static void sub_812AB8C(void); -static void sub_812ABD8(void); -static void sub_812AC08(void); -static void sub_812AC58(void); -static void sub_812AC9C(void); -static void sub_812ACC0(void); -static void sub_812ACEC(void); -static void sub_812AD04(void); -static void sub_812AD20(void); +static void InitWork(struct UnionRoomChat2 * ptr); +static void UnionRoomChat_ResetDisplaySubtasks(void); +static bool32 DisplaySubtask_LoadGfx(u8 *state); +static bool32 DisplaySubtask_PrintWin3(u8 *state); +static bool32 DisplaySubtask_HideWin3(u8 *state); +static bool32 DisplaySubtask_SwitchPages(u8 *state); +static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state); +static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state); +static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state); +static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state); +static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state); +static bool32 DisplaySubtask_CancelRegister(u8 *state); +static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state); +static bool32 DisplaySubtask_ScrollChat(u8 *state); +static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state); +static bool32 DisplaySubtask_PrintInputText(u8 *state); +static bool32 DisplaySubtask_PrintExitingChat(u8 *state); +static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state); +static bool32 DisplaySubtask_AskSave(u8 *state); +static bool32 DisplaySubtask_AskOverwriteSave(u8 *state); +static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state); +static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state); +static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state); +static bool32 DisplaySubtaskDummy(u8 *state); +static void PlaceYesNoMenuAt(u8 a0, u8 a1, u8 a2); +static void HideYesNoMenuWindow(void); +static void DestroyYesNoMenuWindow(void); +static void PlaceStdMessageWindow(int id, u16 bg0vofs); +static void HideStdMessageWindow(void); +static void DestroyStdMessageWindow(void); +static void FillWin1Rect(u16 x, u16 width, u8 fillValue); +static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor); +static void PrintCurrentKeyboardPage(void); +static bool32 AnimateMoveBg1Right(void); +static bool32 AnimateMoveBg1Left(void); +static void PrintKeyboardSwapTextsOnWin3(void); +static void ClearWin3(void); +static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx); +static void ResetGpuBgState(void); +static void SetBgTilemapWorkBuffers(void); +static void ClearBg0(void); +static void LoadUnionRoomChatPanelGfx(void); +static void LoadLinkMiscMenuGfx(void); +static void LoadBg1Pal8(void); +static void LoadWin0(void); +static void LoadWin2(void); +static void LoadWin1(void); +static void LoadWin3(void); static void sub_812AD50(void); -static void sub_812ADA0(s16 a0); -static void sub_812ADF8(s16 a0); +static void FillScanlineEffectWithValue1col(s16 a0); +static void FillScanlineEffectWithValue2col(s16 a0); -static const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); -static const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); -static const u16 gUnknown_845AA64[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); +static const u16 sUnionRoomChatPanelBgPal_C[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); +static const u16 sBg1Pal8[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); +static const u16 sWin0PalF[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); static const struct BgTemplate gUnknown_845AA84[] = { { @@ -183,32 +195,33 @@ static const struct WindowTemplate gUnknown_845AA94[] = { }, DUMMY_WIN_TEMPLATE }; -static const struct Unk845AABC gUnknown_845AABC[] = { - { 0, sub_8129CA0}, - { 3, sub_8129D40}, - { 4, sub_8129D78}, - { 5, sub_8129DB0}, - { 1, sub_8129E1C}, - { 6, sub_8129E28}, - { 7, sub_8129E74}, - { 8, sub_8129EB8}, - { 9, sub_8129F24}, - {10, sub_8129FCC}, - {11, sub_812A074}, - {12, sub_812A0B0}, - { 2, sub_812A18C}, - {13, sub_812A1B8}, - {18, sub_812A1FC}, - {19, sub_812A240}, - {14, sub_812A294}, - {15, sub_812A2E4}, - {16, sub_812A334}, - {17, sub_812A378}, - {20, sub_812A3D0} +static const struct SubtaskInfo sSubtaskInfo[] = { + {CHATDISPLAYROUTINE_LOADGFX, DisplaySubtask_LoadGfx}, + {CHATDISPLAYROUTINE_SHOWKBSWAPMENU, DisplaySubtask_PrintWin3}, + {CHATDISPLAYROUTINE_HIDEKBSWAPMENU, DisplaySubtask_HideWin3}, + {CHATDISPLAYROUTINE_SWITCHPAGES, DisplaySubtask_SwitchPages}, + {CHATDISPLAYROUTINE_MOVEKBCURSOR, DisplaySubtask_MoveSelectorCursorObj}, + {CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, DisplaySubtask_ShowQuitChattingDialog}, + {CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, DisplaySubtask_HideQuitChattingDialog}, + {CHATDISPLAYROUTINE_PRINTMSG, DisplaySubtask_UpdateMessageBuffer}, + {CHATDISPLAYROUTINE_PRINTREGISTERWHERE, DisplaySubtask_PrintRegisterWhere}, + {CHATDISPLAYROUTINE_CANCELREGISTER, DisplaySubtask_CancelRegister}, + {CHATDISPLAYROUTINE_RETURNTOKB, DisplaySubtask_ReturnToKeyboard}, + {CHATDISPLAYROUTINE_SCROLLCHAT, DisplaySubtask_ScrollChat}, + {CHATDISPLAYROUTINE_CURSORBLINK, DisplaySubtask_AnimateSelectorCursorBlink}, + {CHATDISPLAYROUTINE_PRINTINPUTTEXT, DisplaySubtask_PrintInputText}, + {CHATDISPLAYROUTINE_PRINTEXITINGCHAT, DisplaySubtask_PrintExitingChat}, + {CHATDISPLAYROUTINE_PRINTLEADERLEFT, DisplaySubtask_PrintLeaderLeft}, + {CHATDISPLAYROUTINE_ASKSAVE, DisplaySubtask_AskSave}, + {CHATDISPLAYROUTINE_ASKOVERWRITESAVE, DisplaySubtask_AskOverwriteSave}, + {CHATDISPLAYROUTINE_PRINTSAVING, DisplaySubtask_PrintSavingDontTurnOffPower}, + {CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, DisplaySubtask_PrintSavedTheGame}, + {CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, DisplaySubtask_ShowConfirmLeaderLeaveDialog} }; -static const struct Unk845AB64 gUnknown_845AB64[] = { - { +static const struct MessageWindowInfo sMessageWindowInfo[] = { + + [STDMESSAGE_QUIT_CHATTING] = { .text = gText_QuitChatting, .boxType = 1, .x = 0, @@ -217,7 +230,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_REGISTER_WHERE] = { .text = gText_RegisterTextWhere, .boxType = 1, .x = 0, @@ -226,7 +240,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_REGISTER_HERE] = { .text = gText_RegisterTextHere, .boxType = 1, .x = 0, @@ -235,7 +250,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_INPUT_TEXT] = { .text = gText_InputText, .boxType = 1, .x = 0, @@ -244,7 +260,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_EXITING_CHAT] = { .text = gText_ExitingTheChat, .boxType = 2, .x = 0, @@ -253,7 +270,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_LEADER_LEFT] = { .text = gText_LeaderHasLeftEndingChat, .boxType = 2, .x = 0, @@ -262,7 +280,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = TRUE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_ASK_SAVE] = { .text = gText_RegisteredTextChanged_OKtoSave, .boxType = 2, .x = 0, @@ -271,7 +290,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_ASK_OVERWRITE] = { .text = gText_RegisteredTextChanged_AlreadySavedFile, .boxType = 2, .x = 0, @@ -280,7 +300,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_SAVING_NO_OFF] = { .text = gText_RegisteredTextChanged_SavingDontTurnOff, .boxType = 2, .x = 0, @@ -289,7 +310,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_SAVED_THE_GAME] = { .text = gText_RegisteredTextChanged_SavedTheGame, .boxType = 2, .x = 0, @@ -298,7 +320,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = TRUE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_WARN_LEADER_LEAVE] = { .text = gText_IfLeaderLeavesChatWillEnd, .boxType = 2, .x = 0, @@ -312,7 +335,7 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { static const u8 gText_Ellipsis[] = _("…"); -static const struct MenuAction gUnknown_845ABEC[] = { +static const struct MenuAction sKeyboardSwapTexts[] = { {gText_Upper}, {gText_Lower}, {gText_Symbols}, @@ -320,19 +343,19 @@ static const struct MenuAction gUnknown_845ABEC[] = { {gText_Exit} }; -bool8 sub_8129B14(void) +bool8 UnionRoomChat_TryAllocGraphicsWork(void) { - gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4)); - if (gUnknown_203B0E4 && sub_812AE70()) + sWork = Alloc(sizeof(*sWork)); + if (sWork && UnionRoomChat_TryAllocSpriteWork()) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84)); InitWindows(gUnknown_845AA94); ResetTempTileDataBuffers(); sub_812AD50(); - sub_8129BB8(gUnknown_203B0E4); - sub_8129BC4(); - sub_8129C34(0, 0); + InitWork(sWork); + UnionRoomChat_ResetDisplaySubtasks(); + UnionRoomChat_StartDisplaySubtask(0, 0); return TRUE; } else @@ -341,80 +364,80 @@ bool8 sub_8129B14(void) } } -bool32 sub_8129B78(void) +bool32 UnionRoomChat_RunDisplaySubtask0(void) { - return sub_8129C8C(0); + return RunDisplaySubtask(0); } -void sub_8129B88(void) +void UnionRoomChat_FreeGraphicsWork(void) { - sub_812AEB0(); - if (gUnknown_203B0E4) - FREE_AND_SET_NULL(gUnknown_203B0E4); + UnionRoomChat_FreeSpriteWork(); + if (sWork != NULL) + FREE_AND_SET_NULL(sWork); FreeAllWindowBuffers(); gScanlineEffect.state = 3; } -static void sub_8129BB8(struct UnionRoomChat2 *arg0) +static void InitWork(struct UnionRoomChat2 *arg0) { - arg0->unk18 = 0xFF; + arg0->yesNoMenuWinId = 0xFF; arg0->messageWindowId = 0xFF; - arg0->unk1A = 0; + arg0->curLine = 0; } -void sub_8129BC4(void) +void UnionRoomChat_ResetDisplaySubtasks(void) { int i; - if (gUnknown_203B0E4 == NULL) + if (sWork == NULL) return; for (i = 0; i < 3; i++) { - gUnknown_203B0E4->subtasks[i].callback = sub_812A420; - gUnknown_203B0E4->subtasks[i].active = FALSE; - gUnknown_203B0E4->subtasks[i].state = 0; + sWork->subtasks[i].callback = DisplaySubtaskDummy; + sWork->subtasks[i].active = FALSE; + sWork->subtasks[i].state = 0; } } -void sub_8129BFC(void) +void UnionRoomChat_RunDisplaySubtasks(void) { int i; - if (gUnknown_203B0E4 == NULL) + if (sWork == NULL) return; for (i = 0; i < 3; i++) { - if (gUnknown_203B0E4->subtasks[i].active) - gUnknown_203B0E4->subtasks[i].active = gUnknown_203B0E4->subtasks[i].callback(&gUnknown_203B0E4->subtasks[i].state); + if (sWork->subtasks[i].active) + sWork->subtasks[i].active = sWork->subtasks[i].callback(&sWork->subtasks[i].state); } } -void sub_8129C34(u16 arg0, u8 arg1) +void UnionRoomChat_StartDisplaySubtask(u16 arg0, u8 arg1) { int i; - gUnknown_203B0E4->subtasks[arg1].callback = sub_812A420; - for (i = 0; i < NELEMS(gUnknown_845AABC); i++) + sWork->subtasks[arg1].callback = DisplaySubtaskDummy; + for (i = 0; i < NELEMS(sSubtaskInfo); i++) { - if (gUnknown_845AABC[i].idx == arg0) + if (sSubtaskInfo[i].idx == arg0) { - gUnknown_203B0E4->subtasks[arg1].callback = gUnknown_845AABC[i].callback; - gUnknown_203B0E4->subtasks[arg1].active = TRUE; - gUnknown_203B0E4->subtasks[arg1].state = 0; + sWork->subtasks[arg1].callback = sSubtaskInfo[i].callback; + sWork->subtasks[arg1].active = TRUE; + sWork->subtasks[arg1].state = 0; break; } } } -bool8 sub_8129C8C(u8 arg0) +bool8 RunDisplaySubtask(u8 arg0) { - return gUnknown_203B0E4->subtasks[arg0].active; + return sWork->subtasks[arg0].active; } -static bool32 sub_8129CA0(u8 *state) +static bool32 DisplaySubtask_LoadGfx(u8 *state) { if (FreeTempTileDataBuffersIfPossible() == TRUE) return TRUE; @@ -422,33 +445,33 @@ static bool32 sub_8129CA0(u8 *state) switch (*state) { case 0: - sub_812AAD4(); - sub_812AB8C(); + ResetGpuBgState(); + SetBgTilemapWorkBuffers(); break; case 1: - sub_812ABD8(); + ClearBg0(); break; case 2: - sub_812AC08(); + LoadUnionRoomChatPanelGfx(); break; case 3: - sub_812AC58(); + LoadLinkMiscMenuGfx(); break; case 4: - sub_812AC9C(); + LoadBg1Pal8(); break; case 5: - sub_812ACC0(); - sub_812ACEC(); - sub_812AD20(); - sub_812AD04(); + LoadWin0(); + LoadWin2(); + LoadWin3(); + LoadWin1(); break; case 6: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812AEC8(); - sub_812B048(); - sub_812B100(); + UnionRoomChat_CreateSelectorCursorObj(); + UnionRoomChat_SpawnTextEntryPointerSprites(); + CreatePageSwitchUISprites(); } break; default: @@ -459,12 +482,12 @@ static bool32 sub_8129CA0(u8 *state) return TRUE; } -static bool32 sub_8129D40(u8 *state) +static bool32 DisplaySubtask_PrintWin3(u8 *state) { switch (*state) { case 0: - sub_812AA10(); + PrintKeyboardSwapTextsOnWin3(); CopyWindowToVram(3, 3); break; case 1: @@ -475,12 +498,12 @@ static bool32 sub_8129D40(u8 *state) return TRUE; } -static bool32 sub_8129D78(u8 *state) +static bool32 DisplaySubtask_HideWin3(u8 *state) { switch (*state) { case 0: - sub_812AA64(); + ClearWin3(); CopyWindowToVram(3, 3); break; case 1: @@ -491,16 +514,16 @@ static bool32 sub_8129D78(u8 *state) return TRUE; } -static bool32 sub_8129DB0(u8 *state) +static bool32 DisplaySubtask_SwitchPages(u8 *state) { switch (*state) { case 0: - sub_812AEFC(TRUE); - if (sub_812A980()) + UnionRoomChat_ToggleSelectorCursorObjVisibility(TRUE); + if (AnimateMoveBg1Right()) return TRUE; - sub_812A804(); + PrintCurrentKeyboardPage(); CopyWindowToVram(2, 2); break; case 1: @@ -508,12 +531,12 @@ static bool32 sub_8129DB0(u8 *state) return TRUE; break; case 2: - if (sub_812A9C8()) + if (AnimateMoveBg1Left()) return TRUE; - sub_812AF1C(); - sub_812AEFC(FALSE); - sub_812B160(); + UnionRoomChat_MoveSelectorCursorObj(); + UnionRoomChat_ToggleSelectorCursorObjVisibility(FALSE); + UpdateVisibleUnionRoomChatIcon(); return FALSE; } @@ -521,20 +544,20 @@ static bool32 sub_8129DB0(u8 *state) return TRUE; } -static bool32 sub_8129E1C(u8 *state) +static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state) { - sub_812AF1C(); + UnionRoomChat_MoveSelectorCursorObj(); return FALSE; } -static bool32 sub_8129E28(u8 *state) +static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state) { switch (*state) { case 0: - sub_812A578(0, 0); - sub_812A424(23, 11, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0); + PlaceYesNoMenuAt(23, 11, 1); + CopyWindowToVram(sWork->messageWindowId, 3); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -544,21 +567,21 @@ static bool32 sub_8129E28(u8 *state) return TRUE; } -static bool32 sub_8129E74(u8 *state) +static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state) { switch (*state) { case 0: - sub_812A6F4(); - sub_812A51C(); + HideStdMessageWindow(); + HideYesNoMenuWindow(); CopyBgTilemapBufferToVram(0); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - sub_812A728(); - sub_812A544(); + DestroyStdMessageWindow(); + DestroyYesNoMenuWindow(); return FALSE; } @@ -566,24 +589,24 @@ static bool32 sub_8129E74(u8 *state) return TRUE; } -static bool32 sub_8129EB8(u8 *state) +static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state) { - u32 var0, var1; + u32 start, length; u8 *str; switch (*state) { case 0: - sub_8129730(&var0, &var1); - sub_812A74C(var0, var1, 0); - str = sub_8129714(); - sub_812A778(0, str, 3, 1, 2); + UnionRoomChat_GetBufferSelectionRegion(&start, &length); + FillWin1Rect(start, length, PIXEL_FILL(0)); + str = UnionRoomChat_GetMessageEntryBuffer(); + PrintOnWin1Parameterized(0, str, 3, 1, 2); CopyWindowToVram(1, 2); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812B160(); + UpdateVisibleUnionRoomChatIcon(); return FALSE; } return TRUE; @@ -593,7 +616,7 @@ static bool32 sub_8129EB8(u8 *state) return TRUE; } -static bool32 sub_8129F24(u8 *state) +static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state) { u16 var0; u8 *str; @@ -602,18 +625,18 @@ static bool32 sub_8129F24(u8 *state) switch (*state) { case 0: - var0 = sub_8129788(); - str = sub_8129758(); + var0 = UnionRoomChat_GetNumCharsInMessageEntryBuffer(); + str = UnionRoomChat_GetEndOfMessageEntryBuffer(); length = StringLength_Multibyte(str); - sub_812A74C(var0, length, PIXEL_FILL(6)); - sub_812A778(var0, str, 0, 4, 5); + FillWin1Rect(var0, length, PIXEL_FILL(6)); + PrintOnWin1Parameterized(var0, str, 0, 4, 5); CopyWindowToVram(1, 2); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812A578(1, 16); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16); + CopyWindowToVram(sWork->messageWindowId, 3); } else { @@ -622,7 +645,7 @@ static bool32 sub_8129F24(u8 *state) break; case 2: if (!IsDma3ManagerBusyWithBgCopy()) - sub_812AF8C(1); + UnionRoomChat_UpdateObjPalCycle(1); else return TRUE; break; @@ -634,27 +657,27 @@ static bool32 sub_8129F24(u8 *state) return TRUE; } -static bool32 sub_8129FCC(u8 *state) +static bool32 DisplaySubtask_CancelRegister(u8 *state) { - u16 var0; + u16 x; u8 *str; u16 length; switch (*state) { case 0: - var0 = sub_8129788(); - str = sub_8129758(); + x = UnionRoomChat_GetNumCharsInMessageEntryBuffer(); + str = UnionRoomChat_GetEndOfMessageEntryBuffer(); length = StringLength_Multibyte(str); - sub_812A74C(var0, length, PIXEL_FILL(0)); - sub_812A778(var0, str, 3, 1, 2); + FillWin1Rect(x, length, PIXEL_FILL(0)); + PrintOnWin1Parameterized(x, str, 3, 1, 2); CopyWindowToVram(1, 2); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812A6F4(); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + HideStdMessageWindow(); + CopyWindowToVram(sWork->messageWindowId, 3); } else { @@ -664,8 +687,8 @@ static bool32 sub_8129FCC(u8 *state) case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812AF8C(0); - sub_812A728(); + UnionRoomChat_UpdateObjPalCycle(0); + DestroyStdMessageWindow(); } else { @@ -680,12 +703,12 @@ static bool32 sub_8129FCC(u8 *state) return TRUE; } -static bool32 sub_812A074(u8 *state) +static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state) { switch (*state) { case 0: - sub_812A804(); + PrintCurrentKeyboardPage(); CopyWindowToVram(2, 2); (*state)++; break; @@ -699,48 +722,48 @@ static bool32 sub_812A074(u8 *state) return TRUE; } -static bool32 sub_812A0B0(u8 *state) +static bool32 DisplaySubtask_ScrollChat(u8 *state) { - u16 var0; + u16 row; u8 *str; - u8 var1; + u8 colorIdx; switch (*state) { case 0: - var0 = gUnknown_203B0E4->unk1A; - str = sub_81297C4(); - var1 = sub_81297D0(); - sub_812AA78(var0, str, var1); + row = sWork->curLine; + str = UnionRoomChat_GetLastReceivedMessage(); + colorIdx = UnionRoomChat_GetReceivedPlayerIndex(); + PrintTextOnWin0Colorized(row, str, colorIdx); CopyWindowToVram(0, 2); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - if (gUnknown_203B0E4->unk1A < 9) + if (sWork->curLine < 9) { - gUnknown_203B0E4->unk1A++; + sWork->curLine++; *state = 4; return FALSE; } else { - gUnknown_203B0E4->unk1C = 0; + sWork->scrollCount = 0; (*state)++; } // fall through case 2: ScrollWindow(0, 0, 5, PIXEL_FILL(1)); CopyWindowToVram(0, 2); - gUnknown_203B0E4->unk1C++; + sWork->scrollCount++; (*state)++; // fall through case 3: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - if (gUnknown_203B0E4->unk1C < 3) + if (sWork->scrollCount < 3) { (*state)--; return TRUE; @@ -756,28 +779,28 @@ static bool32 sub_812A0B0(u8 *state) return TRUE; } -static bool32 sub_812A18C(u8 *state) +static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state) { switch (*state) { case 0: - sub_812AFC0(); + UnionRoomChat_SetSelectorCursorClosedImage(); (*state)++; break; case 1: - return sub_812AFFC(); + return UnionRoomChat_AnimateSelectorCursorReopen(); } return TRUE; } -static bool32 sub_812A1B8(u8 *state) +static bool32 DisplaySubtask_PrintInputText(u8 *state) { switch (*state) { case 0: - sub_812A578(3, 16); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -787,13 +810,13 @@ static bool32 sub_812A1B8(u8 *state) return TRUE; } -static bool32 sub_812A1FC(u8 *state) +static bool32 DisplaySubtask_PrintExitingChat(u8 *state) { switch (*state) { case 0: - sub_812A578(4, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -803,7 +826,7 @@ static bool32 sub_812A1FC(u8 *state) return TRUE; } -static bool32 sub_812A240(u8 *state) +static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state) { u8 *str; @@ -811,10 +834,10 @@ static bool32 sub_812A240(u8 *state) { case 0: DynamicPlaceholderTextUtil_Reset(); - str = sub_8129814(); + str = UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); - sub_812A578(5, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -824,14 +847,14 @@ static bool32 sub_812A240(u8 *state) return TRUE; } -static bool32 sub_812A294(u8 *state) +static bool32 DisplaySubtask_AskSave(u8 *state) { switch (*state) { case 0: - sub_812A578(6, 0); - sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_ASK_SAVE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -841,14 +864,14 @@ static bool32 sub_812A294(u8 *state) return TRUE; } -static bool32 sub_812A2E4(u8 *state) +static bool32 DisplaySubtask_AskOverwriteSave(u8 *state) { switch (*state) { case 0: - sub_812A578(7, 0); - sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -858,13 +881,13 @@ static bool32 sub_812A2E4(u8 *state) return TRUE; } -static bool32 sub_812A334(u8 *state) +static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state) { switch (*state) { case 0: - sub_812A578(8, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -874,15 +897,15 @@ static bool32 sub_812A334(u8 *state) return TRUE; } -static bool32 sub_812A378(u8 *state) +static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state) { switch (*state) { case 0: DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); - sub_812A578(9, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -892,14 +915,14 @@ static bool32 sub_812A378(u8 *state) return TRUE; } -static bool32 sub_812A3D0(u8 *state) +static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state) { switch (*state) { case 0: - sub_812A578(10, 0); - sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -909,12 +932,12 @@ static bool32 sub_812A3D0(u8 *state) return TRUE; } -static bool32 sub_812A420(u8 *arg0) +static bool32 DisplaySubtaskDummy(u8 *arg0) { return FALSE; } -static void sub_812A424(u8 left, u8 top, u8 initialCursorPos) +static void PlaceYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos) { struct WindowTemplate template; template.bg = 0; @@ -923,43 +946,43 @@ static void sub_812A424(u8 left, u8 top, u8 initialCursorPos) template.width = 6; template.height = 4; template.paletteNum = 14; - template.baseBlock = 0x52; - gUnknown_203B0E4->unk18 = AddWindow(&template); - if (gUnknown_203B0E4->unk18 != 0xFF) + template.baseBlock = 0x052; + sWork->yesNoMenuWinId = AddWindow(&template); + if (sWork->yesNoMenuWinId != 0xFF) { - FillWindowPixelBuffer(gUnknown_203B0E4->unk18, PIXEL_FILL(1)); - PutWindowTilemap(gUnknown_203B0E4->unk18); - AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL); - DrawTextBorderOuter(gUnknown_203B0E4->unk18, 1, 13); - Menu_InitCursor(gUnknown_203B0E4->unk18, 2, 0, 2, 14, 2, initialCursorPos); + FillWindowPixelBuffer(sWork->yesNoMenuWinId, PIXEL_FILL(1)); + PutWindowTilemap(sWork->yesNoMenuWinId); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL); + DrawTextBorderOuter(sWork->yesNoMenuWinId, 1, 13); + Menu_InitCursor(sWork->yesNoMenuWinId, 2, 0, 2, 14, 2, initialCursorPos); } } -static void sub_812A51C(void) +static void HideYesNoMenuWindow(void) { - if (gUnknown_203B0E4->unk18 != 0xFF) + if (sWork->yesNoMenuWinId != 0xFF) { - ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk18, FALSE); - ClearWindowTilemap(gUnknown_203B0E4->unk18); + ClearStdWindowAndFrameToTransparent(sWork->yesNoMenuWinId, FALSE); + ClearWindowTilemap(sWork->yesNoMenuWinId); } } -static void sub_812A544(void) +static void DestroyYesNoMenuWindow(void) { - if (gUnknown_203B0E4->unk18 != 0xFF) + if (sWork->yesNoMenuWinId != 0xFF) { - RemoveWindow(gUnknown_203B0E4->unk18); - gUnknown_203B0E4->unk18 = 0xFF; + RemoveWindow(sWork->yesNoMenuWinId); + sWork->yesNoMenuWinId = 0xFF; } } -s8 sub_812A568(void) +s8 UnionRoomChat_ProcessInput(void) { return Menu_ProcessInput(); } -static void sub_812A578(int arg0, u16 arg1) +static void PlaceStdMessageWindow(int id, u16 bg0vofs) { const u8 *str; int windowId; @@ -971,43 +994,43 @@ static void sub_812A578(int arg0, u16 arg1) template.height = 4; template.paletteNum = 14; template.baseBlock = 0x06A; - if (gUnknown_845AB64[arg0].widerBox) + if (sMessageWindowInfo[id].widerBox) { template.tilemapLeft -= 7; template.width += 7; } - gUnknown_203B0E4->messageWindowId = AddWindow(&template); - windowId = gUnknown_203B0E4->messageWindowId; - if (gUnknown_203B0E4->messageWindowId == 0xFF) + sWork->messageWindowId = AddWindow(&template); + windowId = sWork->messageWindowId; + if (sWork->messageWindowId == 0xFF) return; - if (gUnknown_845AB64[arg0].expandPlaceholders) + if (sMessageWindowInfo[id].expandPlaceholders) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->expandedPlaceholdersBuffer, gUnknown_845AB64[arg0].text); - str = gUnknown_203B0E4->expandedPlaceholdersBuffer; + DynamicPlaceholderTextUtil_ExpandPlaceholders(sWork->expandedPlaceholdersBuffer, sMessageWindowInfo[id].text); + str = sWork->expandedPlaceholdersBuffer; } else { - str = gUnknown_845AB64[arg0].text; + str = sMessageWindowInfo[id].text; } - ChangeBgY(0, arg1 * 256, 0); + ChangeBgY(0, bg0vofs * 256, 0); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); - if (gUnknown_845AB64[arg0].boxType == 1) + if (sMessageWindowInfo[id].boxType == 1) { DrawTextBorderInner(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, 2, str, - gUnknown_845AB64[arg0].x + 8, - gUnknown_845AB64[arg0].y + 8, + sMessageWindowInfo[id].x + 8, + sMessageWindowInfo[id].y + 8, TEXT_SPEED_FF, NULL, - gUnknown_845AB64[arg0].letterSpacing, - gUnknown_845AB64[arg0].lineSpacing); + sMessageWindowInfo[id].letterSpacing, + sMessageWindowInfo[id].lineSpacing); } else { @@ -1016,94 +1039,92 @@ static void sub_812A578(int arg0, u16 arg1) windowId, 2, str, - gUnknown_845AB64[arg0].x, - gUnknown_845AB64[arg0].y, + sMessageWindowInfo[id].x, + sMessageWindowInfo[id].y, TEXT_SPEED_FF, NULL, - gUnknown_845AB64[arg0].letterSpacing, - gUnknown_845AB64[arg0].lineSpacing); + sMessageWindowInfo[id].letterSpacing, + sMessageWindowInfo[id].lineSpacing); } - gUnknown_203B0E4->messageWindowId = windowId; + sWork->messageWindowId = windowId; } -static void sub_812A6F4(void) +static void HideStdMessageWindow(void) { - if (gUnknown_203B0E4->messageWindowId != 0xFF) + if (sWork->messageWindowId != 0xFF) { - ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->messageWindowId, FALSE); - ClearWindowTilemap(gUnknown_203B0E4->messageWindowId); + ClearStdWindowAndFrameToTransparent(sWork->messageWindowId, FALSE); + ClearWindowTilemap(sWork->messageWindowId); } ChangeBgY(0, 0, 0); } -static void sub_812A728(void) +static void DestroyStdMessageWindow(void) { - if (gUnknown_203B0E4->messageWindowId != 0xFF) + if (sWork->messageWindowId != 0xFF) { - RemoveWindow(gUnknown_203B0E4->messageWindowId); - gUnknown_203B0E4->messageWindowId = 0xFF; + RemoveWindow(sWork->messageWindowId); + sWork->messageWindowId = 0xFF; } } -static void sub_812A74C(u16 x, u16 width, u8 fillValue) +static void FillWin1Rect(u16 x, u16 width, u8 fillValue) { FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); } -static void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) +static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) { - u8 *str2; - u8 sp[38]; - if (fillValue) - sub_812A74C(x, sub_81297DC() - x, fillValue); + u8 color[3]; + u8 strbuf[35]; - sp[0] = fillValue; - sp[1] = arg3; - sp[2] = arg4; - str2 = &sp[4]; - str2[0] = EXT_CTRL_CODE_BEGIN; - str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; - str2[2] = 8; - StringCopy(&str2[3], str); - AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2); + if (bgColor != 0) + FillWin1Rect(x, UnionRoomChat_GetMessageEntryCursorPosition() - x, bgColor); + + color[0] = bgColor; + color[1] = fgColor; + color[2] = shadowColor; + strbuf[0] = EXT_CTRL_CODE_BEGIN; + strbuf[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + strbuf[2] = 8; + StringCopy(&strbuf[3], str); + AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strbuf); } -static void sub_812A804(void) +static void PrintCurrentKeyboardPage(void) { u8 page; int i; - int var1; u16 left; u16 top; - u8 sp[52]; - u8 *str; + u8 color[3]; + u8 str[45]; u8 *str2; FillWindowPixelBuffer(2, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); - sp[0] = 0; - sp[1] = 14; - sp[2] = 13; + color[0] = 0; + color[1] = 14; + color[2] = 13; if (page != UNION_ROOM_KB_PAGE_COUNT) { - str = &sp[4]; str[0] = EXT_CTRL_CODE_BEGIN; str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; - var1 = 8; - str[2] = var1; - left = var1; + str[2] = 8; + if (page == UNION_ROOM_KB_PAGE_EMOJI) left = 6; - + else + left = 8; for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12) { if (!gUnionRoomKeyboardText[page][i]) return; - StringCopy(&sp[7], gUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); + StringCopy(&str[3], gUnionRoomKeyboardText[page][i]); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); } } else @@ -1111,10 +1132,10 @@ static void sub_812A804(void) left = 4; for (i = 0, top = 0; i < 10; i++, top += 12) { - str2 = sub_81294B0(i); + str2 = UnionRoomChat_GetWorkRegisteredText(i); if (GetStringWidth(0, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2); } else { @@ -1122,80 +1143,80 @@ static void sub_812A804(void) do { length--; - StringCopyN_Multibyte(&sp[4], str2, length); - } while (GetStringWidth(0, &sp[4], 0) > 35); + StringCopyN_Multibyte(str, str2, length); + } while (GetStringWidth(0, str, 0) > 35); - AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); - AddTextPrinterParameterized3(2, 0, left + 35, top, sp, TEXT_SPEED_FF, gText_Ellipsis); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); + AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, gText_Ellipsis); } } } } -static bool32 sub_812A980(void) +static bool32 AnimateMoveBg1Right(void) { - if (gUnknown_203B0E4->bg1hofs < 56) + if (sWork->bg1hofs < 56) { - gUnknown_203B0E4->bg1hofs += 12; - if (gUnknown_203B0E4->bg1hofs >= 56) - gUnknown_203B0E4->bg1hofs = 56; + sWork->bg1hofs += 12; + if (sWork->bg1hofs >= 56) + sWork->bg1hofs = 56; - if (gUnknown_203B0E4->bg1hofs < 56) + if (sWork->bg1hofs < 56) { - sub_812ADA0(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue1col(sWork->bg1hofs); return TRUE; } } - sub_812ADF8(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue2col(sWork->bg1hofs); return FALSE; } -static bool32 sub_812A9C8(void) +static bool32 AnimateMoveBg1Left(void) { - if (gUnknown_203B0E4->bg1hofs > 0) + if (sWork->bg1hofs > 0) { - gUnknown_203B0E4->bg1hofs -= 12; - if (gUnknown_203B0E4->bg1hofs <= 0) - gUnknown_203B0E4->bg1hofs = 0; + sWork->bg1hofs -= 12; + if (sWork->bg1hofs <= 0) + sWork->bg1hofs = 0; - if (gUnknown_203B0E4->bg1hofs > 0) + if (sWork->bg1hofs > 0) { - sub_812ADA0(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue1col(sWork->bg1hofs); return TRUE; } } - sub_812ADF8(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue2col(sWork->bg1hofs); return FALSE; } -static void sub_812AA10(void) +static void PrintKeyboardSwapTextsOnWin3(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); - UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, gUnknown_845ABEC); + UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, sKeyboardSwapTexts); Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage()); PutWindowTilemap(3); } -static void sub_812AA64(void) +static void ClearWin3(void) { ClearStdWindowAndFrameToTransparent(3, FALSE); ClearWindowTilemap(3); } -static void sub_812AA78(u16 row, u8 *str, u8 arg2) +static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx) { u8 color[3]; color[0] = 1; - color[1] = arg2 * 2 + 2; - color[2] = arg2 * 2 + 3; + color[1] = colorIdx * 2 + 2; + color[2] = colorIdx * 2 + 3; FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str); } -static void sub_812AAD4(void) +static void ResetGpuBgState(void) { ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -1220,31 +1241,31 @@ static void sub_812AAD4(void) SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); } -static void sub_812AB8C(void) +static void SetBgTilemapWorkBuffers(void) { - SetBgTilemapBuffer(0, gUnknown_203B0E4->bg0Buffer); - SetBgTilemapBuffer(1, gUnknown_203B0E4->bg1Buffer); - SetBgTilemapBuffer(3, gUnknown_203B0E4->bg3Buffer); - SetBgTilemapBuffer(2, gUnknown_203B0E4->bg2Buffer); + SetBgTilemapBuffer(0, sWork->bg0Buffer); + SetBgTilemapBuffer(1, sWork->bg1Buffer); + SetBgTilemapBuffer(3, sWork->bg3Buffer); + SetBgTilemapBuffer(2, sWork->bg2Buffer); } -static void sub_812ABD8(void) +static void ClearBg0(void) { RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); } -static void sub_812AC08(void) +static void LoadUnionRoomChatPanelGfx(void) { - LoadPalette(gUnknown_8EAA9F0, 0x70, 0x20); - LoadPalette(gUnknown_845AA24, 0xC0, 0x20); - DecompressAndCopyTileDataToVram(1, gUnknown_8EAAA10, 0, 0, 0); - CopyToBgTilemapBuffer(1, gUnknown_8EAAA6C, 0, 0); + LoadPalette(gUnionRoomChatPanelBgPal_7, 0x70, 0x20); + LoadPalette(sUnionRoomChatPanelBgPal_C, 0xC0, 0x20); + DecompressAndCopyTileDataToVram(1, gUnionRoomChatPanelBgTiles, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnionRoomChatPanelBgMap, 0, 0); CopyBgTilemapBufferToVram(1); } -static void sub_812AC58(void) +static void LoadLinkMiscMenuGfx(void) { u8 *ptr; @@ -1254,35 +1275,35 @@ static void sub_812AC58(void) CopyBgTilemapBufferToVram(2); } -static void sub_812AC9C(void) +static void LoadBg1Pal8(void) { - LoadPalette(gUnknown_845AA44, 0x80, 0x20); + LoadPalette(sBg1Pal8, 0x80, 0x20); RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); } -static void sub_812ACC0(void) +static void LoadWin0(void) { - LoadPalette(gUnknown_845AA64, 0xF0, 0x20); + LoadPalette(sWin0PalF, 0xF0, 0x20); PutWindowTilemap(0); FillWindowPixelBuffer(0, PIXEL_FILL(1)); CopyWindowToVram(0, 3); } -static void sub_812ACEC(void) +static void LoadWin2(void) { PutWindowTilemap(2); - sub_812A804(); + PrintCurrentKeyboardPage(); CopyWindowToVram(2, 3); } -static void sub_812AD04(void) +static void LoadWin1(void) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); PutWindowTilemap(1); CopyWindowToVram(1, 3); } -static void sub_812AD20(void) +static void LoadWin3(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); TextWindow_SetUserSelectedFrame(3, 1, 0xD0); @@ -1297,18 +1318,18 @@ static void sub_812AD50(void) params.dmaDest = ®_BG1HOFS; params.initState = 1; params.unused9 = 0; - gUnknown_203B0E4->bg1hofs = 0; + sWork->bg1hofs = 0; CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); ScanlineEffect_SetParams(params); } -static void sub_812ADA0(s16 arg0) +static void FillScanlineEffectWithValue1col(s16 arg0) { CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); } -static void sub_812ADF8(s16 arg0) +static void FillScanlineEffectWithValue2col(s16 arg0) { CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c index 70f9f48ff..e5b739675 100644 --- a/src/union_room_chat_objects.c +++ b/src/union_room_chat_objects.c @@ -6,238 +6,238 @@ struct UnionRoomChat3 { - struct Sprite *unk0; - struct Sprite *unk4; - struct Sprite *unk8; - struct Sprite *unkC; - struct Sprite *unk10; - u16 unk14; + struct Sprite *selectorCursorSprite; + struct Sprite *characterSelectCursorSprite; + struct Sprite *textEntryCursorSprite; + struct Sprite *rButtonSprite; + struct Sprite *chatIconsSprite; + u16 cursorBlinkTimer; }; -static EWRAM_DATA struct UnionRoomChat3 *gUnknown_203B0E8 = NULL; +static EWRAM_DATA struct UnionRoomChat3 *sWork = NULL; -static void sub_812B09C(struct Sprite * sprite); -static void sub_812B0D4(struct Sprite * sprite); +static void SpriteCB_TextEntryCursor(struct Sprite * sprite); +static void SpriteCB_CharacterSelectCursor(struct Sprite * sprite); -static const u16 gUnknown_845AC14[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); -static const u32 gUnknown_845AC34[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); -static const u32 gUnknown_845AEB8[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); -static const u32 gUnknown_845AED8[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); -static const u32 gUnknown_845AF04[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); +static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); +static const u32 sSelectorCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); +static const u32 sHorizontalBarGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); +static const u32 sMenuCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); +static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); -static const struct CompressedSpriteSheet gUnknown_845AF58[] = { - {gUnknown_845AC34, 0x1000, 0}, - {gUnknown_845AED8, 0x0040, 1}, - {gUnknown_845AEB8, 0x0040, 2}, - {gUnknown_845AF04, 0x0080, 3}, - {gUnknown_8EA1A50, 0x0400, 4} +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {sSelectorCursorGfxTiles, 0x1000, 0}, + {sMenuCursorGfxTiles, 0x0040, 1}, + {sHorizontalBarGfxTiles, 0x0040, 2}, + {sRButtonGfxTiles, 0x0080, 3}, + {gUnionRoomChatIcons, 0x0400, 4} }; -static const struct SpritePalette gUnknown_845AF80 = { - gUnknown_845AC14, 0 +static const struct SpritePalette sSpritePalette = { + sUnionRoomChatInterfacePal, 0 }; -static const struct OamData gOamData_845AF88 = { +static const struct OamData sOamData_64x32_1 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -static const union AnimCmd gAnimCmd_845AF90[] = { +static const union AnimCmd sAnim_CursorSmallOpen[] = { ANIMCMD_FRAME(0x00, 30), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845AF98[] = { +static const union AnimCmd sAnim_CursorSmallClosed[] = { ANIMCMD_FRAME(0x20, 30), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845AFA0[] = { +static const union AnimCmd sAnim_CursorLargeOpen[] = { ANIMCMD_FRAME(0x40, 30), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845AFA8[] = { +static const union AnimCmd sAnim_CursorLargeClosed[] = { ANIMCMD_FRAME(0x60, 30), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_845AFB0[] = { - gAnimCmd_845AF90, - gAnimCmd_845AF98, - gAnimCmd_845AFA0, - gAnimCmd_845AFA8 +static const union AnimCmd *const sSpriteAnims_SelectorCursor[] = { + sAnim_CursorSmallOpen, + sAnim_CursorSmallClosed, + sAnim_CursorLargeOpen, + sAnim_CursorLargeClosed }; -static const struct SpriteTemplate gUnknown_845AFC0 = { +static const struct SpriteTemplate sSpriteTemplate_SelectorCursor = { .tileTag = 0, .paletteTag = 0, - .oam = &gOamData_845AF88, - .anims = gSpriteAnimTable_845AFB0, + .oam = &sOamData_64x32_1, + .anims = sSpriteAnims_SelectorCursor, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gOamData_845AFD8 = { +static const struct OamData sOamData_8x16_2 = { .shape = SPRITE_SHAPE(8x16), .size = SPRITE_SIZE(8x16), .priority = 2 }; -static const struct SpriteTemplate gUnknown_845AFE0 = { +static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = { .tileTag = 2, .paletteTag = 0, - .oam = &gOamData_845AFD8, + .oam = &sOamData_8x16_2, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_812B09C + .callback = SpriteCB_TextEntryCursor }; -static const struct SpriteTemplate gUnknown_845AFF8 = { +static const struct SpriteTemplate sSpriteTemplate_CharacterSelectCursor = { .tileTag = 1, .paletteTag = 0, - .oam = &gOamData_845AFD8, + .oam = &sOamData_8x16_2, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_812B0D4 + .callback = SpriteCB_CharacterSelectCursor }; -static const struct OamData gOamData_845B010 = { +static const struct OamData sOamData_16x16_2 = { .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .priority = 2 }; -static const struct OamData gOamData_845B018 = { +static const struct OamData sOamData_32x16_2 = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 2 }; -static const union AnimCmd gAnimCmd_845B020[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_ToggleCase[] = { ANIMCMD_FRAME(0x00, 2), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845B028[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy1[] = { ANIMCMD_FRAME(0x08, 2), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845B030[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy2[] = { ANIMCMD_FRAME(0x10, 2), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845B038[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_Register[] = { ANIMCMD_FRAME(0x18, 2), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_845B040[] = { - gAnimCmd_845B020, - gAnimCmd_845B028, - gAnimCmd_845B030, - gAnimCmd_845B038 +static const union AnimCmd *const sSpriteAnimTable_UnionRoomChatIcons[] = { + sAnim_UnionRoomChatIcons_ToggleCase, + sAnim_UnionRoomChatIcons_Dummy1, + sAnim_UnionRoomChatIcons_Dummy2, + sAnim_UnionRoomChatIcons_Register }; -static const struct SpriteTemplate gUnknown_845B050 = { +static const struct SpriteTemplate sSpriteTemplate_RButton = { .tileTag = 3, .paletteTag = 0, - .oam = &gOamData_845B010, + .oam = &sOamData_16x16_2, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_845B068 = { +static const struct SpriteTemplate sSpriteTemplate_UnionRoomChatIcons = { .tileTag = 4, .paletteTag = 0, - .oam = &gOamData_845B018, - .anims = gSpriteAnimTable_845B040, + .oam = &sOamData_32x16_2, + .anims = sSpriteAnimTable_UnionRoomChatIcons, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -bool32 sub_812AE70(void) +bool32 UnionRoomChat_TryAllocSpriteWork(void) { u32 i; for (i = 0; i < 5; i++) - LoadCompressedSpriteSheet(&gUnknown_845AF58[i]); + LoadCompressedSpriteSheet(&sSpriteSheets[i]); - LoadSpritePalette(&gUnknown_845AF80); - gUnknown_203B0E8 = Alloc(0x18); - if (!gUnknown_203B0E8) + LoadSpritePalette(&sSpritePalette); + sWork = Alloc(0x18); + if (!sWork) return FALSE; return TRUE; } -void sub_812AEB0(void) +void UnionRoomChat_FreeSpriteWork(void) { - if (gUnknown_203B0E8) - Free(gUnknown_203B0E8); + if (sWork) + Free(sWork); } -void sub_812AEC8(void) +void UnionRoomChat_CreateSelectorCursorObj(void) { - u8 spriteId = CreateSprite(&gUnknown_845AFC0, 10, 24, 0); - gUnknown_203B0E8->unk0 = &gSprites[spriteId]; + u8 spriteId = CreateSprite(&sSpriteTemplate_SelectorCursor, 10, 24, 0); + sWork->selectorCursorSprite = &gSprites[spriteId]; } -void sub_812AEFC(bool32 invisible) +void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible) { - gUnknown_203B0E8->unk0->invisible = invisible; + sWork->selectorCursorSprite->invisible = invisible; } -void sub_812AF1C(void) +void UnionRoomChat_MoveSelectorCursorObj(void) { u8 x, y; u8 page = GetCurrentKeyboardPage(); - sub_8129700(&x, &y); + UnionRoomChat_GetCursorColAndRow(&x, &y); if (page != UNION_ROOM_KB_PAGE_COUNT) { - StartSpriteAnim(gUnknown_203B0E8->unk0, 0); - gUnknown_203B0E8->unk0->pos1.x = x * 8 + 10; - gUnknown_203B0E8->unk0->pos1.y = y * 12 + 24; + StartSpriteAnim(sWork->selectorCursorSprite, 0); + sWork->selectorCursorSprite->pos1.x = x * 8 + 10; + sWork->selectorCursorSprite->pos1.y = y * 12 + 24; } else { - StartSpriteAnim(gUnknown_203B0E8->unk0, 2); - gUnknown_203B0E8->unk0->pos1.x = 24; - gUnknown_203B0E8->unk0->pos1.y = y * 12 + 24; + StartSpriteAnim(sWork->selectorCursorSprite, 2); + sWork->selectorCursorSprite->pos1.x = 24; + sWork->selectorCursorSprite->pos1.y = y * 12 + 24; } } -void sub_812AF8C(int arg0) +void UnionRoomChat_UpdateObjPalCycle(int arg0) { - const u16 *palette = &gUnknown_845AC14[arg0 * 2 + 1]; + const u16 *palette = &sUnionRoomChatInterfacePal[arg0 * 2 + 1]; u8 index = IndexOfSpritePaletteTag(0); LoadPalette(palette, index * 16 + 0x101, 4); } -void sub_812AFC0(void) +void UnionRoomChat_SetSelectorCursorClosedImage(void) { if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) - StartSpriteAnim(gUnknown_203B0E8->unk0, 1); + StartSpriteAnim(sWork->selectorCursorSprite, 1); else - StartSpriteAnim(gUnknown_203B0E8->unk0, 3); + StartSpriteAnim(sWork->selectorCursorSprite, 3); - gUnknown_203B0E8->unk14 = 0; + sWork->cursorBlinkTimer = 0; } -bool32 sub_812AFFC(void) +bool32 UnionRoomChat_AnimateSelectorCursorReopen(void) { - if (gUnknown_203B0E8->unk14 > 3) + if (sWork->cursorBlinkTimer > 3) return FALSE; - if (++gUnknown_203B0E8->unk14 > 3) + if (++sWork->cursorBlinkTimer > 3) { if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) - StartSpriteAnim(gUnknown_203B0E8->unk0, 0); + StartSpriteAnim(sWork->selectorCursorSprite, 0); else - StartSpriteAnim(gUnknown_203B0E8->unk0, 2); + StartSpriteAnim(sWork->selectorCursorSprite, 2); return FALSE; } @@ -245,17 +245,17 @@ bool32 sub_812AFFC(void) return TRUE; } -void sub_812B048(void) +void UnionRoomChat_SpawnTextEntryPointerSprites(void) { - u8 spriteId = CreateSprite(&gUnknown_845AFE0, 76, 152, 2); - gUnknown_203B0E8->unk8 = &gSprites[spriteId]; - spriteId = CreateSprite(&gUnknown_845AFF8, 64, 152, 1); - gUnknown_203B0E8->unk4 = &gSprites[spriteId]; + u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2); + sWork->textEntryCursorSprite = &gSprites[spriteId]; + spriteId = CreateSprite(&sSpriteTemplate_CharacterSelectCursor, 64, 152, 1); + sWork->characterSelectCursorSprite = &gSprites[spriteId]; } -static void sub_812B09C(struct Sprite *sprite) +static void SpriteCB_TextEntryCursor(struct Sprite *sprite) { - int var0 = sub_81297DC(); + int var0 = UnionRoomChat_GetMessageEntryCursorPosition(); if (var0 == 15) { sprite->invisible = TRUE; @@ -267,7 +267,7 @@ static void sub_812B09C(struct Sprite *sprite) } } -static void sub_812B0D4(struct Sprite *sprite) +static void SpriteCB_CharacterSelectCursor(struct Sprite *sprite) { if (++sprite->data[0] > 4) { @@ -277,40 +277,42 @@ static void sub_812B0D4(struct Sprite *sprite) } } -void sub_812B100(void) +void CreatePageSwitchUISprites(void) { - u8 spriteId = CreateSprite(&gUnknown_845B050, 8, 152, 3); - gUnknown_203B0E8->unkC = &gSprites[spriteId]; - spriteId = CreateSprite(&gUnknown_845B068, 32, 152, 4); - gUnknown_203B0E8->unk10 = &gSprites[spriteId]; - gUnknown_203B0E8->unk10->invisible = 1; + u8 spriteId = CreateSprite(&sSpriteTemplate_RButton, 8, 152, 3); + sWork->rButtonSprite = &gSprites[spriteId]; + spriteId = CreateSprite(&sSpriteTemplate_UnionRoomChatIcons, 32, 152, 4); + sWork->chatIconsSprite = &gSprites[spriteId]; + sWork->chatIconsSprite->invisible = TRUE; } -void sub_812B160(void) +void UpdateVisibleUnionRoomChatIcon(void) { if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT) { - if (sub_8129720() != 0) + if (UnionRoomChat_LenMessageEntryBuffer() != 0) { - gUnknown_203B0E8->unk10->invisible = 0; - StartSpriteAnim(gUnknown_203B0E8->unk10, 3); + // REGISTER + sWork->chatIconsSprite->invisible = FALSE; + StartSpriteAnim(sWork->chatIconsSprite, 3); } else { - gUnknown_203B0E8->unk10->invisible = 1; + sWork->chatIconsSprite->invisible = TRUE; } } else { - int anim = sub_81297E8(); + int anim = UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(); if (anim == 3) { - gUnknown_203B0E8->unk10->invisible = 1; + sWork->chatIconsSprite->invisible = TRUE; } else { - gUnknown_203B0E8->unk10->invisible = 0; - StartSpriteAnim(gUnknown_203B0E8->unk10, anim); + // A <--> a + sWork->chatIconsSprite->invisible = FALSE; + StartSpriteAnim(sWork->chatIconsSprite, anim); } } } From 52fbc43d73995977aa8f6c45405a91c68d515061 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 25 Jan 2020 21:00:51 -0500 Subject: [PATCH 11/11] Address review comments --- include/constants/global.h | 5 +++ include/global.h | 73 ++++++++++++++++++++++++----------- src/daycare.c | 2 +- src/pokemon.c | 2 +- src/union_room_chat.c | 6 +-- src/union_room_chat_display.c | 17 ++++---- src/union_room_chat_objects.c | 10 ++--- 7 files changed, 74 insertions(+), 41 deletions(-) diff --git a/include/constants/global.h b/include/constants/global.h index 77ef6f203..7f3c80bb4 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -38,6 +38,10 @@ #define FEMALE 1 #define GENDER_COUNT 2 +#define BARD_SONG_LENGTH 6 +#define NUM_STORYTELLER_TALES 4 +#define NUM_TRADER_ITEMS 4 + #define OPTIONS_BUTTON_MODE_HELP 0 #define OPTIONS_BUTTON_MODE_LR 1 #define OPTIONS_BUTTON_MODE_L_EQUALS_A 2 @@ -62,6 +66,7 @@ #define MAX_MON_MOVES 4 +#define TRAINER_ID_LENGTH 4 #define PARTY_SIZE 6 #define MULTI_PARTY_SIZE (PARTY_SIZE / 2) diff --git a/include/global.h b/include/global.h index 9f46c2eee..2f87a0c29 100644 --- a/include/global.h +++ b/include/global.h @@ -312,7 +312,7 @@ struct SecretBaseRecord /*0x1A9D*/ u8 gender:1; /*0x1A9D*/ u8 sbr_field_1_5:1; /*0x1A9D*/ u8 sbr_field_1_6:2; - /*0x1A9E*/ u8 trainerName[7]; // TODO: Change PLAYER_NAME_LENGTH + 1 to 7 + /*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH]; /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class /*0x1AA9*/ u8 language; /*0x1AAA*/ u16 sbr_field_e; @@ -398,41 +398,68 @@ struct MailStruct /*0x20*/ u16 itemId; }; -struct UnkMauvilleOldManStruct +struct MauvilleManCommon { - u8 unk_2D94; - u8 unk_2D95; - /*0x2D96*/ u16 mauvilleOldMan_ecArray[6]; - /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6]; - /*0x2DAE*/ u8 playerName[PLAYER_NAME_LENGTH + 1 + 1]; - /*0x2DB6*/ u8 filler_2DB6[0x3]; - /*0x2DB9*/ u8 playerTrainerId[4]; - u8 unk_2DBD; + u8 id; +}; + +struct MauvilleManBard +{ + /*0x00*/ u8 id; + /*0x02*/ u16 songLyrics[BARD_SONG_LENGTH]; + /*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH]; + /*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x22*/ u8 filler_2DB6[0x3]; + /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH]; + /*0x29*/ bool8 hasChangedSong; + /*0x2A*/ u8 language; }; /*size = 0x2C*/ -struct UnkMauvilleOldManStruct2 +struct MauvilleManStoryteller { - u8 filler0; - u8 unk1; - u8 unk2; - u16 mauvilleOldMan_ecArray[10]; - u8 mauvilleOldMan_ecArray2[12]; - u8 fillerF[0x2]; + u8 id; + bool8 alreadyRecorded; + u8 filler2[2]; + u8 gameStatIDs[NUM_STORYTELLER_TALES]; + u8 trainerNames[NUM_STORYTELLER_TALES][PLAYER_NAME_LENGTH]; + u8 statValues[NUM_STORYTELLER_TALES][4]; + u8 language[NUM_STORYTELLER_TALES]; +}; + +struct MauvilleManGiddy +{ + /*0x00*/ u8 id; + /*0x01*/ u8 taleCounter; + /*0x02*/ u8 questionNum; + /*0x04*/ u16 randomWords[10]; + /*0x18*/ u8 questionList[8]; + /*0x20*/ u8 language; }; /*size = 0x2C*/ +struct MauvilleManHipster +{ + u8 id; + bool8 alreadySpoken; + u8 language; +}; + struct MauvilleOldManTrader { - u8 unk0; - u8 unk1[4]; - u8 unk5[4][11]; - u8 unk31; + u8 id; + u8 decorIds[NUM_TRADER_ITEMS]; + u8 playerNames[NUM_TRADER_ITEMS][11]; + u8 alreadyTraded; + u8 language[NUM_TRADER_ITEMS]; }; typedef union OldMan { - struct UnkMauvilleOldManStruct oldMan1; - struct UnkMauvilleOldManStruct2 oldMan2; + struct MauvilleManCommon common; + struct MauvilleManBard bard; + struct MauvilleManGiddy giddy; + struct MauvilleManHipster hipster; struct MauvilleOldManTrader trader; + struct MauvilleManStoryteller storyteller; u8 filler[0x40]; } OldMan; diff --git a/src/daycare.c b/src/daycare.c index ef9da89fe..277a382c7 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -614,7 +614,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH + 1/* + 1*/; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) mail->OT_name[i] = 0; for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) mail->monName[i] = 0; diff --git a/src/pokemon.c b/src/pokemon.c index 130709598..09e2ed998 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5769,7 +5769,7 @@ s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor) bool8 IsTradedMon(struct Pokemon *mon) { - u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH + 1 to 7 + u8 otName[PLAYER_NAME_LENGTH]; u32 otId; GetMonData(mon, MON_DATA_OT_NAME, otName); otId = GetMonData(mon, MON_DATA_OT_ID, 0); diff --git a/src/union_room_chat.c b/src/union_room_chat.c index f4a192b35..d672c6b68 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -405,7 +405,7 @@ static void ChatEntryRoutine_HandleInput(void) static void ChatEntryRoutine_Switch(void) { s16 input; - int shouldSwitchPages; + bool32 shouldSwitchPages; switch (sWork->routineState) { @@ -423,9 +423,9 @@ static void ChatEntryRoutine_Switch(void) { default: UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); - shouldSwitchPages = 1; + shouldSwitchPages = TRUE; if (sWork->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) - shouldSwitchPages = 0; + shouldSwitchPages = FALSE; break; case MENU_NOTHING_CHOSEN: if (JOY_NEW(SELECT_BUTTON)) diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index f43e40368..54aef8d65 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -600,7 +600,7 @@ static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state) UnionRoomChat_GetBufferSelectionRegion(&start, &length); FillWin1Rect(start, length, PIXEL_FILL(0)); str = UnionRoomChat_GetMessageEntryBuffer(); - PrintOnWin1Parameterized(0, str, 3, 1, 2); + PrintOnWin1Parameterized(0, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY); CopyWindowToVram(1, 2); break; case 1: @@ -629,7 +629,7 @@ static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state) str = UnionRoomChat_GetEndOfMessageEntryBuffer(); length = StringLength_Multibyte(str); FillWin1Rect(var0, length, PIXEL_FILL(6)); - PrintOnWin1Parameterized(var0, str, 0, 4, 5); + PrintOnWin1Parameterized(var0, str, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED); CopyWindowToVram(1, 2); break; case 1: @@ -670,7 +670,7 @@ static bool32 DisplaySubtask_CancelRegister(u8 *state) str = UnionRoomChat_GetEndOfMessageEntryBuffer(); length = StringLength_Multibyte(str); FillWin1Rect(x, length, PIXEL_FILL(0)); - PrintOnWin1Parameterized(x, str, 3, 1, 2); + PrintOnWin1Parameterized(x, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY); CopyWindowToVram(1, 2); break; case 1: @@ -1080,7 +1080,7 @@ static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 u8 color[3]; u8 strbuf[35]; - if (bgColor != 0) + if (bgColor != TEXT_COLOR_TRANSPARENT) FillWin1Rect(x, UnionRoomChat_GetMessageEntryCursorPosition() - x, bgColor); color[0] = bgColor; @@ -1105,9 +1105,9 @@ static void PrintCurrentKeyboardPage(void) FillWindowPixelBuffer(2, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); - color[0] = 0; - color[1] = 14; - color[2] = 13; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_DYNAMIC_COLOR_5; + color[2] = TEXT_DYNAMIC_COLOR_4; if (page != UNION_ROOM_KB_PAGE_COUNT) { str[0] = EXT_CTRL_CODE_BEGIN; @@ -1207,9 +1207,10 @@ static void ClearWin3(void) } static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx) +// colorIdx: 0 = grey, 1 = red, 2 = green, 3 = blue { u8 color[3]; - color[0] = 1; + color[0] = TEXT_COLOR_WHITE; color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c index e5b739675..f97136a0a 100644 --- a/src/union_room_chat_objects.c +++ b/src/union_room_chat_objects.c @@ -162,13 +162,13 @@ static const struct SpriteTemplate sSpriteTemplate_UnionRoomChatIcons = { bool32 UnionRoomChat_TryAllocSpriteWork(void) { - u32 i; - for (i = 0; i < 5; i++) + int i; + for (i = 0; i < NELEMS(sSpriteSheets); i++) LoadCompressedSpriteSheet(&sSpriteSheets[i]); LoadSpritePalette(&sSpritePalette); - sWork = Alloc(0x18); - if (!sWork) + sWork = Alloc(sizeof(struct UnionRoomChat3)); + if (sWork == NULL) return FALSE; return TRUE; @@ -176,7 +176,7 @@ bool32 UnionRoomChat_TryAllocSpriteWork(void) void UnionRoomChat_FreeSpriteWork(void) { - if (sWork) + if (sWork != NULL) Free(sWork); }