From c1e802e361fde3ee802c1b19a4c8311c5816c6eb Mon Sep 17 00:00:00 2001 From: zsilencer Date: Fri, 7 Aug 2015 09:11:10 -0600 Subject: [PATCH] fix text for utf8 --- src/interface/chat.c | 9 +++++---- src/network/network.cpp | 25 ++++++++++++++----------- src/windows/network_status.c | 7 ++++--- src/windows/player_list.c | 22 +++++++++++++--------- src/world/map.c | 2 +- 5 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/interface/chat.c b/src/interface/chat.c index 57d852520d..863327ddcc 100644 --- a/src/interface/chat.c +++ b/src/interface/chat.c @@ -64,7 +64,8 @@ void chat_draw() _chatTop = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - 40 - ((CHAT_HISTORY_SIZE + 1) * 10); _chatRight = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - 10; _chatBottom = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - 40; - char lineBuffer[CHAT_INPUT_SIZE + 3]; + char lineBuffer[CHAT_INPUT_SIZE + 10]; + char* lineCh = lineBuffer; int x = _chatLeft; int y = _chatBottom - (10 * 2); RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 224; @@ -78,9 +79,9 @@ void chat_draw() gfx_draw_string(dpi, lineBuffer, 255, x, y); } if (gChatOpen) { - lineBuffer[0] = FORMAT_OUTLINE; - lineBuffer[1] = FORMAT_CELADON; - strcpy(lineBuffer + 2, _chatCurrentLine); + lineCh = utf8_write_codepoint(lineCh, FORMAT_OUTLINE); + lineCh = utf8_write_codepoint(lineCh, FORMAT_CELADON); + strcpy(lineCh, _chatCurrentLine); y = _chatBottom - 10; gfx_set_dirty_blocks(x, y, x + gfx_get_string_width(lineBuffer) + 7, y + 12); if (_chatCaretTicks < 15) { diff --git a/src/network/network.cpp b/src/network/network.cpp index 25eea2fcc8..68b7e13772 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -203,7 +203,7 @@ int NetworkConnection::SendPacket(NetworkPacket& packet) void NetworkConnection::QueuePacket(std::unique_ptr packet) { if (authstatus == NETWORK_AUTH_OK || authstatus == NETWORK_AUTH_REQUESTED) { - packet->size = packet->data->size(); + packet->size = (uint16)packet->data->size(); outboundpackets.push_back(std::move(packet)); } } @@ -452,12 +452,13 @@ NetworkPlayer* Network::GetPlayerByID(int id) { const char* Network::FormatChat(NetworkPlayer* fromplayer, const char* text) { static char formatted[1024]; + char* lineCh = formatted; formatted[0] = 0; if (fromplayer) { - formatted[0] = (char)FORMAT_OUTLINE; - formatted[1] = (char)FORMAT_BABYBLUE; - strcpy(&formatted[2], (const char*)fromplayer->name); - strcat(formatted, ": "); + lineCh = utf8_write_codepoint(lineCh, FORMAT_OUTLINE); + lineCh = utf8_write_codepoint(lineCh, FORMAT_BABYBLUE); + strcpy(lineCh, (const char*)fromplayer->name); + strcat(lineCh, ": "); } strcat(formatted, text); return formatted; @@ -669,9 +670,10 @@ void Network::RemoveClient(std::unique_ptr& connection) NetworkPlayer* connection_player = connection->player; if (connection_player) { char text[256]; - text[0] = (char)FORMAT_OUTLINE; - text[1] = (char)FORMAT_RED; - sprintf(&text[2], "%s has disconnected", connection_player->name); + char* lineCh = text; + lineCh = utf8_write_codepoint(lineCh, FORMAT_OUTLINE); + lineCh = utf8_write_codepoint(lineCh, FORMAT_RED); + sprintf(lineCh, "%s has disconnected", connection_player->name); chat_history_add(text); gNetwork.Server_Send_CHAT(text); } @@ -743,9 +745,10 @@ int Network::Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& pa if (player) { playerid = player->id; char text[256]; - text[0] = (char)FORMAT_OUTLINE; - text[1] = (char)FORMAT_GREEN; - sprintf(&text[2], "%s has joined the game", player->name); + char* lineCh = text; + lineCh = utf8_write_codepoint(lineCh, FORMAT_OUTLINE); + lineCh = utf8_write_codepoint(lineCh, FORMAT_GREEN); + sprintf(lineCh, "%s has joined the game", player->name); chat_history_add(text); gNetwork.Server_Send_CHAT(text); Server_Send_MAP(&connection); diff --git a/src/windows/network_status.c b/src/windows/network_status.c index e0c5af29a0..d2f49888a1 100644 --- a/src/windows/network_status.c +++ b/src/windows/network_status.c @@ -133,9 +133,10 @@ static void window_network_status_paint(rct_window *w, rct_drawpixelinfo *dpi) { window_draw_widgets(w, dpi); RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 224; - char buffer[sizeof(window_network_status_text) + 1]; - buffer[0] = FORMAT_BLACK; - strcpy(&buffer[1], window_network_status_text); + char buffer[sizeof(window_network_status_text) + 10]; + char* lineCh = buffer; + lineCh = utf8_write_codepoint(lineCh, FORMAT_BLACK); + strcpy(lineCh, window_network_status_text); gfx_clip_string(buffer, 230); int x = w->x + (w->width / 2); int y = w->y + (w->height / 2); diff --git a/src/windows/player_list.c b/src/windows/player_list.c index f095e3df58..538887d547 100644 --- a/src/windows/player_list.c +++ b/src/windows/player_list.c @@ -226,29 +226,33 @@ static void window_player_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi if (y + 11 >= dpi->y) { char buffer[300]; + char* lineCh = buffer; int colour = 0; if (i == w->selected_list_item) { gfx_fill_rect(dpi, 0, y, 800, y + 9, 0x02000031); strcpy(&buffer[0], network_get_player_name(i)); colour = w->colours[2]; } else { - buffer[0] = FORMAT_BLACK; if (network_get_player_flags(i) & NETWORK_PLAYER_FLAG_ISSERVER) { - buffer[0] = FORMAT_BABYBLUE; + lineCh = utf8_write_codepoint(lineCh, FORMAT_BABYBLUE); + } else { + lineCh = utf8_write_codepoint(lineCh, FORMAT_BLACK); } - strcpy(&buffer[1], network_get_player_name(i)); + strcpy(lineCh, network_get_player_name(i)); } gfx_clip_string(buffer, 230); gfx_draw_string(dpi, buffer, colour, 0, y - 1); - buffer[0] = FORMAT_RED; + lineCh = buffer; int ping = network_get_player_ping(i); - if (ping <= 250) { - buffer[0] = FORMAT_YELLOW; - } if (ping <= 100) { - buffer[0] = FORMAT_GREEN; + lineCh = utf8_write_codepoint(lineCh, FORMAT_GREEN); + } else + if (ping <= 250) { + lineCh = utf8_write_codepoint(lineCh, FORMAT_YELLOW); + } else { + lineCh = utf8_write_codepoint(lineCh, FORMAT_RED); } - sprintf(&buffer[1], "%d ms", ping); + sprintf(lineCh, "%d ms", ping); gfx_draw_string(dpi, buffer, colour, 240, y - 1); } y += 10; diff --git a/src/world/map.c b/src/world/map.c index e310fa3da5..d57bf00797 100644 --- a/src/world/map.c +++ b/src/world/map.c @@ -1482,7 +1482,7 @@ money32 map_clear_scenery(int x0, int y0, int x1, int y1, int clear, int flags) for (y = y0; y <= y1; y += 32) { for (x = x0; x <= x1; x += 32) { if ((RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR) || gCheatsSandboxMode || map_is_location_owned_or_has_rights(x, y)) { - cost = map_clear_scenery_from_tile(x / 32, y / 32, flags); + cost = map_clear_scenery_from_tile(x / 32, y / 32, clear, flags); if (cost != MONEY32_UNDEFINED) { noValidTiles = false; totalCost += cost;