diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/union_room_chat.c | 309 |
1 files changed, 308 insertions, 1 deletions
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; + } } |