diff --git a/desktop_version/src/Editor.cpp b/desktop_version/src/Editor.cpp index a0dcc2da..3dca8480 100644 --- a/desktop_version/src/Editor.cpp +++ b/desktop_version/src/Editor.cpp @@ -1052,8 +1052,14 @@ static void draw_entities(void) height = font::height(PR_FONT_LEVEL); } - graphics.draw_rect(x, y, width, height, graphics.getRGB(96, 96, 96)); - font::print(PR_FONT_LEVEL | PR_CJK_LOW, x, y, entity->scriptname, 196, 196, 255 - help.glow); + int rect_x = x; + if (entity->p1) + { + // RTL. The 8 is the size of a tile, not font width! + rect_x -= width - 8; + } + graphics.draw_rect(rect_x, y, width, height, graphics.getRGB(96, 96, 96)); + graphics.print_roomtext(x, y, entity->scriptname.c_str(), entity->p1); break; } case 18: // Terminals @@ -2549,7 +2555,7 @@ void editorclass::tool_place() case EditorTool_ROOMTEXT: lclickdelay = 1; text_entity = customentities.size(); - add_entity(levx, levy, tilex, tiley, 17); + add_entity(levx, levy, tilex, tiley, 17, cl.rtl ? 1 : 0); get_input_line(TEXT_ROOMTEXT, loc::gettext("Enter roomtext:"), &(customentities[text_entity].scriptname)); break; case EditorTool_TERMINALS: diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index 6b631503..fefae038 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -3602,3 +3602,15 @@ void Graphics::render_roomname(uint32_t font_flag, const char* roomname, int r, font::print(font_flag | PR_CEN | PR_BOR | PR_CJK_LOW, -1, footerrect.y+1, roomname, r, g, b); set_blendmode(SDL_BLENDMODE_NONE); } + +void Graphics::print_roomtext(int x, const int y, const char* text, const bool rtl) +{ + uint32_t flags = PR_FONT_LEVEL | PR_CJK_LOW; + + if (rtl) + { + flags |= PR_RIGHT; + x += 8; // the size of a tile, not font width! + } + font::print(flags, x, y, text, 196, 196, 255 - help.glow); +} diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index 8383678a..ec201c62 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -414,6 +414,8 @@ public: SDL_Color crewcolourreal(int t); void render_roomname(uint32_t font_flag, const char* roomname, int r, int g, int b); + + void print_roomtext(int x, int y, const char* text, bool rtl); }; #ifndef GRAPHICS_DEFINITION diff --git a/desktop_version/src/Map.cpp b/desktop_version/src/Map.cpp index e538b1b8..747ebc38 100644 --- a/desktop_version/src/Map.cpp +++ b/desktop_version/src/Map.cpp @@ -1895,6 +1895,7 @@ void mapclass::loadlevel(int rx, int ry) text.x = ex / 8; text.y = ey / 8; text.text = ent.scriptname.c_str(); + text.rtl = ent.p1; roomtext.push_back(text); break; } diff --git a/desktop_version/src/Map.h b/desktop_version/src/Map.h index 2e9f62af..d809c2e7 100644 --- a/desktop_version/src/Map.h +++ b/desktop_version/src/Map.h @@ -16,6 +16,7 @@ struct Roomtext { int x, y; const char* text; + bool rtl; }; enum RoomnameType diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index f0bf6a9c..6e2ec073 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -2364,7 +2364,7 @@ void gamerender(void) //Draw room text! for (size_t i = 0; i < map.roomtext.size(); i++) { - font::print(PR_FONT_LEVEL | PR_CJK_LOW, map.roomtext[i].x*8, (map.roomtext[i].y*8), map.roomtext[i].text, 196, 196, 255 - help.glow); + graphics.print_roomtext(map.roomtext[i].x*8, map.roomtext[i].y*8, map.roomtext[i].text, map.roomtext[i].rtl); } }