mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +01:00
implement utf8, part 23 (bug fixes)
This commit is contained in:
@@ -3822,3 +3822,4 @@ STR_5482 :{WINDOW_COLOUR_2}Time since last inspection: {BLACK}1 minute
|
|||||||
STR_5483 :{BLACK}({COMMA16} weeks remaining)
|
STR_5483 :{BLACK}({COMMA16} weeks remaining)
|
||||||
STR_5484 :{BLACK}({COMMA16} week remaining)
|
STR_5484 :{BLACK}({COMMA16} week remaining)
|
||||||
STR_5485 :{SMALLFONT}{STRING}
|
STR_5485 :{SMALLFONT}{STRING}
|
||||||
|
STR_5486 :{BLACK}{COMMA16}
|
||||||
|
|||||||
@@ -705,13 +705,13 @@ static config_line *_configLines = NULL;
|
|||||||
* @param resultPath Pointer to where the absolute path of the RCT2 installation directory will be copied to.
|
* @param resultPath Pointer to where the absolute path of the RCT2 installation directory will be copied to.
|
||||||
* @returns 1 if successful, otherwise 0.
|
* @returns 1 if successful, otherwise 0.
|
||||||
*/
|
*/
|
||||||
static bool config_find_rct2_path(char *resultPath)
|
static bool config_find_rct2_path(utf8 *resultPath)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
log_verbose("searching common installation locations.");
|
log_verbose("searching common installation locations.");
|
||||||
|
|
||||||
const char *searchLocations[] = {
|
const utf8 *searchLocations[] = {
|
||||||
"C:\\Program Files\\Infogrames\\RollerCoaster Tycoon 2",
|
"C:\\Program Files\\Infogrames\\RollerCoaster Tycoon 2",
|
||||||
"C:\\Program Files (x86)\\Infogrames\\RollerCoaster Tycoon 2",
|
"C:\\Program Files (x86)\\Infogrames\\RollerCoaster Tycoon 2",
|
||||||
"C:\\Program Files\\Infogrames Interactive\\RollerCoaster Tycoon 2",
|
"C:\\Program Files\\Infogrames Interactive\\RollerCoaster Tycoon 2",
|
||||||
@@ -734,8 +734,8 @@ static bool config_find_rct2_path(char *resultPath)
|
|||||||
|
|
||||||
bool config_find_or_browse_install_directory()
|
bool config_find_or_browse_install_directory()
|
||||||
{
|
{
|
||||||
char path[MAX_PATH];
|
utf8 path[MAX_PATH];
|
||||||
char *installPath;
|
utf8 *installPath;
|
||||||
|
|
||||||
if (config_find_rct2_path(path)) {
|
if (config_find_rct2_path(path)) {
|
||||||
SafeFree(gConfigGeneral.game_path);
|
SafeFree(gConfigGeneral.game_path);
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ int gfx_wrap_string(utf8 *text, int width, int *outNumLines, int *outFontHeight)
|
|||||||
numCharactersOnLine = 0;
|
numCharactersOnLine = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
maxWidth = max(maxWidth, lineWidth);
|
||||||
*outFontHeight = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16);
|
*outFontHeight = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16);
|
||||||
return maxWidth == 0 ? lineWidth : maxWidth;
|
return maxWidth == 0 ? lineWidth : maxWidth;
|
||||||
}
|
}
|
||||||
@@ -608,15 +608,7 @@ void draw_string_centred_raw(rct_drawpixelinfo *dpi, int x, int y, int numLines,
|
|||||||
text += 2;
|
text += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
y += 10;
|
y += font_get_line_height(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16));
|
||||||
if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) <= 224)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
y -= 4;
|
|
||||||
if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) <= 448)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
y += 12;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1825,6 +1825,8 @@ enum {
|
|||||||
STR_X_WEEKS_REMAINING = 5483,
|
STR_X_WEEKS_REMAINING = 5483,
|
||||||
STR_1_WEEK_REMAINING = 5484,
|
STR_1_WEEK_REMAINING = 5484,
|
||||||
|
|
||||||
|
STR_LAND_TOOL_SIZE_VALUE = 5486,
|
||||||
|
|
||||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||||
STR_COUNT = 32768
|
STR_COUNT = 32768
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -39,8 +39,8 @@
|
|||||||
#include "world/mapgen.h"
|
#include "world/mapgen.h"
|
||||||
|
|
||||||
int gOpenRCT2StartupAction = STARTUP_ACTION_TITLE;
|
int gOpenRCT2StartupAction = STARTUP_ACTION_TITLE;
|
||||||
char gOpenRCT2StartupActionPath[512] = { 0 };
|
utf8 gOpenRCT2StartupActionPath[512] = { 0 };
|
||||||
char gExePath[MAX_PATH];
|
utf8 gExePath[MAX_PATH];
|
||||||
|
|
||||||
// This should probably be changed later and allow a custom selection of things to initialise like SDL_INIT
|
// This should probably be changed later and allow a custom selection of things to initialise like SDL_INIT
|
||||||
bool gOpenRCT2Headless = false;
|
bool gOpenRCT2Headless = false;
|
||||||
@@ -112,19 +112,18 @@ static void openrct2_copy_files_over(const char *originalDirectory, const char *
|
|||||||
|
|
||||||
static void openrct2_set_exe_path()
|
static void openrct2_set_exe_path()
|
||||||
{
|
{
|
||||||
char exePath[MAX_PATH];
|
wchar_t exePath[MAX_PATH];
|
||||||
char tempPath[MAX_PATH];
|
wchar_t tempPath[MAX_PATH];
|
||||||
char *exeDelimiter;
|
wchar_t *exeDelimiter;
|
||||||
int pathEnd;
|
|
||||||
int exeDelimiterIndex;
|
int exeDelimiterIndex;
|
||||||
|
|
||||||
GetModuleFileName(NULL, exePath, MAX_PATH);
|
GetModuleFileNameW(NULL, exePath, MAX_PATH);
|
||||||
exeDelimiter = strrchr(exePath, platform_get_path_separator());
|
exeDelimiter = wcsrchr(exePath, platform_get_path_separator());
|
||||||
exeDelimiterIndex = (int)(exeDelimiter - exePath);
|
exeDelimiterIndex = (int)(exeDelimiter - exePath);
|
||||||
pathEnd = strlen(exePath) - (strlen(exePath) - exeDelimiterIndex);
|
lstrcpynW(tempPath, exePath, exeDelimiterIndex + 1);
|
||||||
strncpy(tempPath, exePath, pathEnd);
|
tempPath[exeDelimiterIndex] = L'\0';
|
||||||
tempPath[pathEnd] = '\0';
|
_wfullpath(exePath, tempPath, MAX_PATH);
|
||||||
_fullpath(gExePath, tempPath, MAX_PATH);
|
WideCharToMultiByte(CP_UTF8, 0, exePath, countof(exePath), gExePath, countof(gExePath), NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ unsigned int platform_get_ticks();
|
|||||||
void platform_get_user_directory(char *outPath, const char *subDirectory);
|
void platform_get_user_directory(char *outPath, const char *subDirectory);
|
||||||
void platform_show_messagebox(char *message);
|
void platform_show_messagebox(char *message);
|
||||||
int platform_open_common_file_dialog(int type, char *title, char *filename, char *filterPattern, char *filterName);
|
int platform_open_common_file_dialog(int type, char *title, char *filename, char *filterPattern, char *filterName);
|
||||||
char *platform_open_directory_browser(char *title);
|
utf8 *platform_open_directory_browser(utf8 *title);
|
||||||
uint8 platform_get_locale_currency();
|
uint8 platform_get_locale_currency();
|
||||||
uint16 platform_get_locale_language();
|
uint16 platform_get_locale_language();
|
||||||
uint8 platform_get_locale_measurement_format();
|
uint8 platform_get_locale_measurement_format();
|
||||||
|
|||||||
@@ -413,8 +413,11 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8
|
|||||||
lstrcpyW((wchar_t*)0x01423800, wcfilterName);
|
lstrcpyW((wchar_t*)0x01423800, wcfilterName);
|
||||||
|
|
||||||
// Copy filter pattern
|
// Copy filter pattern
|
||||||
lstrcpyW((wchar_t*)0x01423800 + lstrlenW(wcfilterName) + 1, wcfilterPattern);
|
int wcfilterNameLength = lstrlenW(wcfilterName);
|
||||||
*((wchar_t*)(0x01423800 + lstrlenW(wcfilterName) + 1 + lstrlenW(wcfilterPattern) + 1)) = 0;
|
int wcfilterPatternLength = lstrlenW(wcfilterPattern);
|
||||||
|
|
||||||
|
lstrcpyW((wchar_t*)0x01423800 + wcfilterNameLength + 1, wcfilterPattern);
|
||||||
|
*((wchar_t*)((wchar_t*)0x01423800 + wcfilterNameLength + 1 + wcfilterPatternLength + 1)) = 0;
|
||||||
openFileName.lpstrFilter = (wchar_t*)0x01423800;
|
openFileName.lpstrFilter = (wchar_t*)0x01423800;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -440,13 +443,15 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *platform_open_directory_browser(char *title)
|
utf8 *platform_open_directory_browser(utf8 *title)
|
||||||
{
|
{
|
||||||
BROWSEINFO bi;
|
BROWSEINFOW bi;
|
||||||
char pszBuffer[MAX_PATH];
|
wchar_t pszBuffer[MAX_PATH], wctitle[256];
|
||||||
LPITEMIDLIST pidl;
|
LPITEMIDLIST pidl;
|
||||||
LPMALLOC lpMalloc;
|
LPMALLOC lpMalloc;
|
||||||
|
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, title, -1, wctitle, countof(wctitle));
|
||||||
|
|
||||||
// Initialize COM
|
// Initialize COM
|
||||||
if (FAILED(CoInitializeEx(0, COINIT_APARTMENTTHREADED))) {
|
if (FAILED(CoInitializeEx(0, COINIT_APARTMENTTHREADED))) {
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
@@ -466,19 +471,20 @@ char *platform_open_directory_browser(char *title)
|
|||||||
bi.hwndOwner = NULL;
|
bi.hwndOwner = NULL;
|
||||||
bi.pidlRoot = NULL;
|
bi.pidlRoot = NULL;
|
||||||
bi.pszDisplayName = pszBuffer;
|
bi.pszDisplayName = pszBuffer;
|
||||||
bi.lpszTitle = title;
|
bi.lpszTitle = wctitle;
|
||||||
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
|
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
|
||||||
bi.lpfn = NULL;
|
bi.lpfn = NULL;
|
||||||
bi.lParam = 0;
|
bi.lParam = 0;
|
||||||
|
|
||||||
char *outPath = NULL;
|
utf8 *outPath = NULL;
|
||||||
|
|
||||||
if (pidl = SHBrowseForFolder(&bi)) {
|
if (pidl = SHBrowseForFolderW(&bi)) {
|
||||||
// Copy the path directory to the buffer
|
// Copy the path directory to the buffer
|
||||||
if (SHGetPathFromIDList(pidl, pszBuffer)) {
|
if (SHGetPathFromIDListW(pidl, pszBuffer)) {
|
||||||
// Store pszBuffer (and the path) in the outPath
|
// Store pszBuffer (and the path) in the outPath
|
||||||
outPath = (char*) malloc(strlen(pszBuffer)+1);
|
int outPathCapacity = lstrlenW(pszBuffer) * 4 + 1;
|
||||||
strcpy(outPath, pszBuffer);
|
outPath = (utf8*)malloc(outPathCapacity);
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, pszBuffer, countof(pszBuffer), outPath, outPathCapacity, NULL, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
|
|||||||
@@ -804,7 +804,7 @@ static void window_editor_inventions_list_scrollpaint(rct_window *w, rct_drawpix
|
|||||||
int left, top, bottom, itemY, disableItemMovement;
|
int left, top, bottom, itemY, disableItemMovement;
|
||||||
sint32 researchItemEndMarker;
|
sint32 researchItemEndMarker;
|
||||||
rct_string_id stringId;
|
rct_string_id stringId;
|
||||||
char buffer[256], *ptr;
|
utf8 buffer[256], *ptr;
|
||||||
|
|
||||||
// Draw background
|
// Draw background
|
||||||
colour = RCT2_GLOBAL(0x0141FC48 + (w->colours[1] * 8), uint8);
|
colour = RCT2_GLOBAL(0x0141FC48 + (w->colours[1] * 8), uint8);
|
||||||
@@ -856,8 +856,9 @@ static void window_editor_inventions_list_scrollpaint(rct_window *w, rct_drawpix
|
|||||||
stringId = research_item_get_name(researchItem->entryIndex & 0xFFFFFF);
|
stringId = research_item_get_name(researchItem->entryIndex & 0xFFFFFF);
|
||||||
|
|
||||||
ptr = buffer;
|
ptr = buffer;
|
||||||
if (!disableItemMovement)
|
if (!disableItemMovement) {
|
||||||
*ptr++ = colour & 0xFF;
|
ptr = utf8_write_codepoint(ptr, colour & 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
format_string(ptr, stringId, NULL);
|
format_string(ptr, stringId, NULL);
|
||||||
|
|
||||||
|
|||||||
@@ -375,11 +375,7 @@ static void window_land_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||||||
|
|
||||||
// FEATURE larger land tool size support
|
// FEATURE larger land tool size support
|
||||||
if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) {
|
if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) {
|
||||||
RCT2_GLOBAL(0x009BC677, char) = FORMAT_BLACK;
|
gfx_draw_string_centred(dpi, STR_LAND_TOOL_SIZE_VALUE, x, y - 2, 0, &RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16));
|
||||||
RCT2_GLOBAL(0x009BC678, char) = FORMAT_COMMA16;
|
|
||||||
RCT2_GLOBAL(0x009BC679, char) = 0;
|
|
||||||
RCT2_GLOBAL(0x013CE952, sint16) = RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16);
|
|
||||||
gfx_draw_string_centred(dpi, 3165, x, y - 2, 0, (void*)0x013CE952);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
x = w->x + (window_land_widgets[WIDX_PREVIEW].left + window_land_widgets[WIDX_PREVIEW].right) / 2 + 17;
|
x = w->x + (window_land_widgets[WIDX_PREVIEW].left + window_land_widgets[WIDX_PREVIEW].right) / 2 + 17;
|
||||||
|
|||||||
@@ -798,11 +798,7 @@ static void window_map_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||||||
|
|
||||||
// Draw land tool size
|
// Draw land tool size
|
||||||
if (widget_is_active_tool(w, WIDX_SET_LAND_RIGHTS) && RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) {
|
if (widget_is_active_tool(w, WIDX_SET_LAND_RIGHTS) && RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) {
|
||||||
RCT2_GLOBAL(0x009BC677, char) = FORMAT_BLACK;
|
gfx_draw_string_centred(dpi, STR_LAND_TOOL_SIZE_VALUE, x, y - 2, 0, &RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16));
|
||||||
RCT2_GLOBAL(0x009BC678, char) = FORMAT_COMMA16;
|
|
||||||
RCT2_GLOBAL(0x009BC679, char) = 0;
|
|
||||||
RCT2_GLOBAL(0x013CE952, sint16) = RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16);
|
|
||||||
gfx_draw_string_centred(dpi, 3165, x, y - 2, 0, (void*)0x013CE952);
|
|
||||||
}
|
}
|
||||||
y = w->y + window_map_widgets[WIDX_LAND_TOOL].bottom + 5;
|
y = w->y + window_map_widgets[WIDX_LAND_TOOL].bottom + 5;
|
||||||
|
|
||||||
|
|||||||
@@ -112,24 +112,21 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y
|
|||||||
char* buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char);
|
char* buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char);
|
||||||
|
|
||||||
format_string(buffer, widget->tooltip, (void*)0x013CE952);
|
format_string(buffer, widget->tooltip, (void*)0x013CE952);
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 224;
|
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = FONT_SPRITE_BASE_MEDIUM;
|
||||||
|
|
||||||
int tooltip_text_width = 0, tooltip_text_height = 0;
|
|
||||||
|
|
||||||
|
int tooltip_text_width;
|
||||||
tooltip_text_width = gfx_get_string_width_new_lined(buffer);
|
tooltip_text_width = gfx_get_string_width_new_lined(buffer);
|
||||||
buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char);
|
buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char);
|
||||||
tooltip_text_width &= 0xFFFF;
|
tooltip_text_width = min(tooltip_text_width, 196);
|
||||||
if (tooltip_text_width > 196)
|
|
||||||
tooltip_text_width = 196;
|
|
||||||
|
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 224;
|
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = FONT_SPRITE_BASE_MEDIUM;
|
||||||
|
|
||||||
int fontHeight;
|
int numLines, fontSpriteBase;
|
||||||
tooltip_text_width = gfx_wrap_string(buffer, tooltip_text_width + 1, &tooltip_text_height, &fontHeight);
|
tooltip_text_width = gfx_wrap_string(buffer, tooltip_text_width + 1, &numLines, &fontSpriteBase);
|
||||||
|
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_TEXT_HEIGHT, sint16) = tooltip_text_height;
|
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_TEXT_HEIGHT, sint16) = numLines;
|
||||||
width = tooltip_text_width + 3;
|
width = tooltip_text_width + 3;
|
||||||
height = ((tooltip_text_height + 1) * 10) + 4;
|
height = ((numLines + 1) * font_get_line_height(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16))) + 4;
|
||||||
window_tooltip_widgets[WIDX_BACKGROUND].right = width;
|
window_tooltip_widgets[WIDX_BACKGROUND].right = width;
|
||||||
window_tooltip_widgets[WIDX_BACKGROUND].bottom = height;
|
window_tooltip_widgets[WIDX_BACKGROUND].bottom = height;
|
||||||
|
|
||||||
@@ -220,6 +217,6 @@ static void window_tooltip_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||||||
|
|
||||||
// Text
|
// Text
|
||||||
left = w->x + ((w->width + 1) / 2) - 1;
|
left = w->x + ((w->width + 1) / 2) - 1;
|
||||||
top = w->y + 1;
|
top = w->y + 2;
|
||||||
draw_string_centred_raw(dpi, left, top, RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_TEXT_HEIGHT, uint16), gTooltip_text_buffer);
|
draw_string_centred_raw(dpi, left, top, RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_TEXT_HEIGHT, uint16), gTooltip_text_buffer);
|
||||||
}
|
}
|
||||||
@@ -240,11 +240,7 @@ static void window_water_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||||||
window_draw_widgets(w, dpi);
|
window_draw_widgets(w, dpi);
|
||||||
// FEATURE larger land tool size support
|
// FEATURE larger land tool size support
|
||||||
if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) {
|
if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) {
|
||||||
RCT2_GLOBAL(0x009BC677, char) = FORMAT_BLACK;
|
gfx_draw_string_centred(dpi, STR_LAND_TOOL_SIZE_VALUE, x, y - 2, 0, &RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16));
|
||||||
RCT2_GLOBAL(0x009BC678, char) = FORMAT_COMMA16;
|
|
||||||
RCT2_GLOBAL(0x009BC679, char) = 0;
|
|
||||||
RCT2_GLOBAL(0x013CE952, sint16) = RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16);
|
|
||||||
gfx_draw_string_centred(dpi, 3165, x, y - 2, 0, (void*)0x013CE952);
|
|
||||||
}
|
}
|
||||||
y = w->y + window_water_widgets[WIDX_PREVIEW].bottom + 5;
|
y = w->y + window_water_widgets[WIDX_PREVIEW].bottom + 5;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user