diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index cce4a9db7f..ce39520e09 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-20.04 container: # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.28 + image: emscripten/emsdk:3.1.37 steps: - name: Checkout @@ -42,7 +42,7 @@ jobs: uses: actions/cache@v3 with: path: /emsdk/upstream/emscripten/cache - key: 3.1.28-${{ runner.os }} + key: 3.1.37-${{ runner.os }} - name: Patch Emscripten to support LZMA run: | @@ -127,6 +127,7 @@ jobs: liballegro4-dev \ libcurl4-openssl-dev \ libfontconfig-dev \ + libharfbuzz-dev \ libicu-dev \ liblzma-dev \ libzstd-dev \ diff --git a/.github/workflows/preview_build.yml b/.github/workflows/preview_build.yml index b1d7b917ef..b73d993665 100644 --- a/.github/workflows/preview_build.yml +++ b/.github/workflows/preview_build.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-20.04 container: # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.28 + image: emscripten/emsdk:3.1.37 steps: - name: Update deployment status to in progress @@ -45,7 +45,7 @@ jobs: uses: actions/cache@v3 with: path: /emsdk/upstream/emscripten/cache - key: 3.1.28-${{ runner.os }} + key: 3.1.37-${{ runner.os }} - name: Patch Emscripten to support LZMA run: | @@ -83,7 +83,7 @@ jobs: echo "::group::Build" echo "Running on $(nproc) cores" - emmake make -j$(nproc) + cmake --build . -j $(nproc) --target openttd echo "::endgroup::" - name: Publish preview diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dc51ec4dd1..834305ab76 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -295,16 +295,21 @@ jobs: - name: Install dependencies run: | echo "::group::Install system dependencies" - # ICU is used as vcpkg fails to install ICU. Other dependencies - # are needed either for vcpkg or for the packages installed with - # vcpkg. + # perl-IPC-Cmd, wget, and zip are needed to run vcpkg. + # autoconf-archive is needed to build ICU. yum install -y \ - libicu-devel \ + autoconf-archive \ libpng-devel \ perl-IPC-Cmd \ wget \ zip \ # EOF + + # aclocal looks first in /usr/local/share/aclocal, and if that doesn't + # exist only looks in /usr/share/aclocal. We have files in both that + # are important. So copy the latter to the first, and we are good to + # go. + cp /usr/share/aclocal/* /usr/local/share/aclocal/ echo "::endgroup::" # We use vcpkg for our dependencies, to get more up-to-date version. @@ -331,6 +336,8 @@ jobs: curl[http2] \ fontconfig \ freetype \ + harfbuzz \ + icu \ liblzma \ libpng \ lzo \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dbf18bc34..e5a9d5c01c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,7 +140,8 @@ if(NOT OPTION_DEDICATED) endif() find_package(Fluidsynth) find_package(Fontconfig) - find_package(ICU OPTIONAL_COMPONENTS i18n lx) + find_package(Harfbuzz) + find_package(ICU OPTIONAL_COMPONENTS i18n) endif() endif() endif() @@ -208,6 +209,12 @@ if(UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) if(NOT SDL_FOUND AND NOT SDL2_FOUND AND NOT ALLEGRO_FOUND) message(FATAL_ERROR "SDL, SDL2 or Allegro is required for this platform") endif() + if(HARFBUZZ_FOUND AND NOT ICU_i18n_FOUND) + message(WARNING "HarfBuzz depends on ICU i18n to function; HarfBuzz will be disabled") + endif() + if(NOT HARFBUZZ_FOUND) + message(WARNING "Without HarfBuzz and ICU i18n the game will not be able to render right-to-left languages correctly") + endif() endif() if(APPLE) if(NOT AUDIOTOOLBOX_LIBRARY) @@ -350,7 +357,7 @@ if(NOT OPTION_DEDICATED) link_package(Allegro) link_package(FREETYPE TARGET Freetype::Freetype) link_package(Fontconfig TARGET Fontconfig::Fontconfig) - link_package(ICU_lx) + link_package(Harfbuzz TARGET harfbuzz::harfbuzz) link_package(ICU_i18n) link_package(Fcitx) link_package(DBus1) diff --git a/COMPILING.md b/COMPILING.md index 117425886a..68fbbb73c7 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -17,6 +17,7 @@ For Linux, the following additional libraries are used: - libSDL2: hardware access (video, sound, mouse) - libfreetype: loading generic fonts and rendering them - libfontconfig: searching for fonts, resolving font names to actual fonts +- harfbuzz: handling of right-to-left scripts (e.g. Arabic and Persian) (required libicu) - libicu: handling of right-to-left scripts (e.g. Arabic and Persian) and natural sorting of strings diff --git a/Doxyfile.in b/Doxyfile.in index 5a361d7fdb..b914947a96 100644 --- a/Doxyfile.in +++ b/Doxyfile.in @@ -293,8 +293,8 @@ PREDEFINED = WITH_ZLIB \ WITH_PNG \ WITH_FONTCONFIG \ WITH_FREETYPE \ + WITH_HARFBUZZ \ WITH_ICU_I18N \ - WITH_ICU_LX \ UNICODE \ _UNICODE \ _GNU_SOURCE \ diff --git a/README.md b/README.md index 2f2a5a753f..21fb0a325b 100644 --- a/README.md +++ b/README.md @@ -570,6 +570,9 @@ The implementation of C++17 `std::optional` in `src/3rdparty/optional` is licens See `src/3rdparty/optional/LICENSE_1_0.txt` for the complete license text. +The icu scriptrun implementation in `src/3rdparty/icu` is licensed under the Unicode license. +See `src/3rdparty/icu/LICENSE` for the complete license text. + ## 4.0 Credits See [CREDITS.md](./CREDITS.md) diff --git a/cmake/FindHarfbuzz.cmake b/cmake/FindHarfbuzz.cmake new file mode 100644 index 0000000000..11a4dcb303 --- /dev/null +++ b/cmake/FindHarfbuzz.cmake @@ -0,0 +1,65 @@ +#[=======================================================================[.rst: +FindHarfBuzz +------- + +Finds the harfbuzz library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Harfbuzz_FOUND`` + True if the system has the harfbuzz library. +``Harfbuzz_INCLUDE_DIRS`` + Include directories needed to use harfbuzz. +``Harfbuzz_LIBRARIES`` + Libraries needed to link to harfbuzz. +``Harfbuzz_VERSION`` + The version of the harfbuzz library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Harfbuzz_INCLUDE_DIR`` + The directory containing ``hb.h``. +``Harfbuzz_LIBRARY`` + The path to the harfbuzz library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_Harfbuzz QUIET harfbuzz) + +find_path(Harfbuzz_INCLUDE_DIR + NAMES hb.h + PATHS ${PC_Harfbuzz_INCLUDE_DIRS} +) + +find_library(Harfbuzz_LIBRARY + NAMES harfbuzz + PATHS ${PC_Harfbuzz_LIBRARY_DIRS} +) + +set(Harfbuzz_VERSION ${PC_Harfbuzz_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Harfbuzz + FOUND_VAR Harfbuzz_FOUND + REQUIRED_VARS + Harfbuzz_LIBRARY + Harfbuzz_INCLUDE_DIR + VERSION_VAR Harfbuzz_VERSION +) + +if(Harfbuzz_FOUND) + set(Harfbuzz_LIBRARIES ${Harfbuzz_LIBRARY}) + set(Harfbuzz_INCLUDE_DIRS ${Harfbuzz_INCLUDE_DIR}) +endif() + +mark_as_advanced( + Harfbuzz_INCLUDE_DIR + Harfbuzz_LIBRARY +) diff --git a/cmake/FindICU.cmake b/cmake/FindICU.cmake index d12f36b0ad..efb3ba3abf 100644 --- a/cmake/FindICU.cmake +++ b/cmake/FindICU.cmake @@ -9,7 +9,7 @@ FindICU Finds components of the ICU library. -Accepted components are: uc, i18n, le, lx, io +Accepted components are: uc, i18n, le, lx, io, data Result Variables ^^^^^^^^^^^^^^^^ @@ -31,7 +31,7 @@ This will define the following variables: find_package(PkgConfig QUIET) -set(ICU_KNOWN_COMPONENTS "uc" "i18n" "le" "lx" "io") +set(ICU_KNOWN_COMPONENTS "uc" "i18n" "le" "lx" "io" "data") foreach(MOD_NAME IN LISTS ICU_FIND_COMPONENTS) if(NOT MOD_NAME IN_LIST ICU_KNOWN_COMPONENTS) diff --git a/os/emscripten/Dockerfile b/os/emscripten/Dockerfile index ae3579ec0a..e92858df87 100644 --- a/os/emscripten/Dockerfile +++ b/os/emscripten/Dockerfile @@ -1,4 +1,4 @@ -FROM emscripten/emsdk:3.1.28 +FROM emscripten/emsdk:3.1.37 COPY emsdk-liblzma.patch / RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch diff --git a/os/emscripten/emsdk-liblzma.patch b/os/emscripten/emsdk-liblzma.patch index fbb24e7ca9..7bfdd47de2 100644 --- a/os/emscripten/emsdk-liblzma.patch +++ b/os/emscripten/emsdk-liblzma.patch @@ -1,30 +1,20 @@ -From 90dd4d4c6b1cedec338ff5b375fffca93700f7bc Mon Sep 17 00:00:00 2001 +From 84d0e9112d5c87a714abd21ec8547921f46f37b5 Mon Sep 17 00:00:00 2001 From: milek7 Date: Tue, 8 Dec 2020 01:03:31 +0100 Subject: [PATCH] Add liblzma port --- -Source: https://github.com/emscripten-core/emscripten/pull/12990 + src/settings.js | 4 ++ + tools/ports/liblzma.py | 151 +++++++++++++++++++++++++++++++++++++++++ + tools/settings.py | 1 + + 3 files changed, 156 insertions(+) + create mode 100644 tools/ports/liblzma.py -Modifed by OpenTTD to have the bare minimum needed to work. Otherwise there -are constantly conflicts when trying to apply this patch to different versions -of emsdk. - -diff --git a/tools/settings.py b/tools/settings.py ---- a/tools/settings.py -+++ b/tools/settings.py -@@ -40,6 +40,7 @@ PORTS_SETTINGS = { - 'USE_SDL_NET', - 'USE_SDL_GFX', - 'USE_LIBJPEG', -+ 'USE_LIBLZMA', - 'USE_OGG', - 'USE_REGAL', - 'USE_BOOST_HEADERS', diff --git a/src/settings.js b/src/settings.js +index f93140d..7b6bec9 100644 --- a/src/settings.js +++ b/src/settings.js -@@ -1450,6 +1450,10 @@ var USE_GIFLIB = false; +@@ -1451,6 +1451,10 @@ var USE_GIFLIB = false; // [compile+link] var USE_LIBJPEG = false; @@ -35,9 +25,9 @@ diff --git a/src/settings.js b/src/settings.js // 1 = use libpng from emscripten-ports // [compile+link] var USE_LIBPNG = false; - diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py new file mode 100644 +index 0000000..6872a8b --- /dev/null +++ b/tools/ports/liblzma.py @@ -0,0 +1,151 @@ @@ -51,8 +41,8 @@ new file mode 100644 +import logging +from pathlib import Path + -+VERSION = '5.4.0' -+HASH = '29b2cd25bb5b234b329ffe9547692d2c29be393db9d8d4ce70a66dfdaebd54433e79a89d80c57e58cd4559c3c68b9845507d5fedf3eec1c528a81e3d9ddbd811' ++VERSION = '5.4.2' ++HASH = '149f980338bea3d66de1ff5994b2b236ae1773135eda68b62b009df0c9dcdf5467f8cb2c06da95a71b6556d60bd3d21f475feced34d5dfdb80ee95416a2f9737' + + +def needed(settings): @@ -192,3 +182,17 @@ new file mode 100644 +#endif +#define VERSION "5.4.0" +''' +diff --git a/tools/settings.py b/tools/settings.py +index 10d6ca0..827e4a9 100644 +--- a/tools/settings.py ++++ b/tools/settings.py +@@ -40,6 +40,7 @@ PORTS_SETTINGS = { + 'USE_SDL_NET', + 'USE_SDL_GFX', + 'USE_LIBJPEG', ++ 'USE_LIBLZMA', + 'USE_OGG', + 'USE_REGAL', + 'USE_BOOST_HEADERS', +-- +2.34.1 diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt index 8e04db5b46..b87ec0158e 100644 --- a/src/3rdparty/CMakeLists.txt +++ b/src/3rdparty/CMakeLists.txt @@ -1,4 +1,5 @@ add_subdirectory(fmt) +add_subdirectory(icu) add_subdirectory(md5) add_subdirectory(squirrel) add_subdirectory(opengl) diff --git a/src/3rdparty/icu/CMakeLists.txt b/src/3rdparty/icu/CMakeLists.txt new file mode 100644 index 0000000000..09afc44926 --- /dev/null +++ b/src/3rdparty/icu/CMakeLists.txt @@ -0,0 +1,5 @@ +add_files( + scriptrun.cpp + scriptrun.h + CONDITION ICU_i18n_FOUND +) diff --git a/src/3rdparty/icu/LICENSE b/src/3rdparty/icu/LICENSE new file mode 100644 index 0000000000..e216c7f3ad --- /dev/null +++ b/src/3rdparty/icu/LICENSE @@ -0,0 +1,46 @@ +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2023 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. diff --git a/src/3rdparty/icu/scriptrun.cpp b/src/3rdparty/icu/scriptrun.cpp new file mode 100644 index 0000000000..d0ed37dcb9 --- /dev/null +++ b/src/3rdparty/icu/scriptrun.cpp @@ -0,0 +1,208 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* + ******************************************************************************* + * + * Copyright (C) 1999-2016, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * file name: scrptrun.cpp + * + * created on: 10/17/2001 + * created by: Eric R. Mader + */ + +#include +#include + +#include "scriptrun.h" + +// Copied from cmemory.h +#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +U_NAMESPACE_BEGIN + +const char ScriptRun::fgClassID=0; + +UChar32 ScriptRun::pairedChars[] = { + 0x0028, 0x0029, // ascii paired punctuation + 0x003c, 0x003e, + 0x005b, 0x005d, + 0x007b, 0x007d, + 0x00ab, 0x00bb, // guillemets + 0x2018, 0x2019, // general punctuation + 0x201c, 0x201d, + 0x2039, 0x203a, + 0x3008, 0x3009, // chinese paired punctuation + 0x300a, 0x300b, + 0x300c, 0x300d, + 0x300e, 0x300f, + 0x3010, 0x3011, + 0x3014, 0x3015, + 0x3016, 0x3017, + 0x3018, 0x3019, + 0x301a, 0x301b +}; + +const int32_t ScriptRun::pairedCharCount = UPRV_LENGTHOF(pairedChars); +const int32_t ScriptRun::pairedCharPower = 1 << highBit(pairedCharCount); +const int32_t ScriptRun::pairedCharExtra = pairedCharCount - pairedCharPower; + +int8_t ScriptRun::highBit(int32_t value) +{ + if (value <= 0) { + return -32; + } + + int8_t bit = 0; + + if (value >= 1 << 16) { + value >>= 16; + bit += 16; + } + + if (value >= 1 << 8) { + value >>= 8; + bit += 8; + } + + if (value >= 1 << 4) { + value >>= 4; + bit += 4; + } + + if (value >= 1 << 2) { + value >>= 2; + bit += 2; + } + + if (value >= 1 << 1) { + value >>= 1; + bit += 1; + } + + return bit; +} + +int32_t ScriptRun::getPairIndex(UChar32 ch) +{ + int32_t probe = pairedCharPower; + int32_t index = 0; + + if (ch >= pairedChars[pairedCharExtra]) { + index = pairedCharExtra; + } + + while (probe > (1 << 0)) { + probe >>= 1; + + if (ch >= pairedChars[index + probe]) { + index += probe; + } + } + + if (pairedChars[index] != ch) { + index = -1; + } + + return index; +} + +UBool ScriptRun::sameScript(int32_t scriptOne, int32_t scriptTwo) +{ + return scriptOne <= USCRIPT_INHERITED || scriptTwo <= USCRIPT_INHERITED || scriptOne == scriptTwo; +} + +UBool ScriptRun::next() +{ + int32_t startSP = parenSP; // used to find the first new open character + UErrorCode error = U_ZERO_ERROR; + + // if we've fallen off the end of the text, we're done + if (scriptEnd >= charLimit) { + return false; + } + + scriptCode = USCRIPT_COMMON; + + for (scriptStart = scriptEnd; scriptEnd < charLimit; scriptEnd += 1) { + char16_t high = charArray[scriptEnd]; + UChar32 ch = high; + + // if the character is a high surrogate and it's not the last one + // in the text, see if it's followed by a low surrogate + if (high >= 0xD800 && high <= 0xDBFF && scriptEnd < charLimit - 1) + { + char16_t low = charArray[scriptEnd + 1]; + + // if it is followed by a low surrogate, + // consume it and form the full character + if (low >= 0xDC00 && low <= 0xDFFF) { + ch = (high - 0xD800) * 0x0400 + low - 0xDC00 + 0x10000; + scriptEnd += 1; + } + } + + UScriptCode sc = uscript_getScript(ch, &error); + int32_t pairIndex = getPairIndex(ch); + + // Paired character handling: + // + // if it's an open character, push it onto the stack. + // if it's a close character, find the matching open on the + // stack, and use that script code. Any non-matching open + // characters above it on the stack will be poped. + if (pairIndex >= 0) { + if ((pairIndex & 1) == 0) { + parenStack[++parenSP].pairIndex = pairIndex; + parenStack[parenSP].scriptCode = scriptCode; + } else if (parenSP >= 0) { + int32_t pi = pairIndex & ~1; + + while (parenSP >= 0 && parenStack[parenSP].pairIndex != pi) { + parenSP -= 1; + } + + if (parenSP < startSP) { + startSP = parenSP; + } + + if (parenSP >= 0) { + sc = parenStack[parenSP].scriptCode; + } + } + } + + if (sameScript(scriptCode, sc)) { + if (scriptCode <= USCRIPT_INHERITED && sc > USCRIPT_INHERITED) { + scriptCode = sc; + + // now that we have a final script code, fix any open + // characters we pushed before we knew the script code. + while (startSP < parenSP) { + parenStack[++startSP].scriptCode = scriptCode; + } + } + + // if this character is a close paired character, + // pop it from the stack + if (pairIndex >= 0 && (pairIndex & 1) != 0 && parenSP >= 0) { + parenSP -= 1; + startSP -= 1; + } + } else { + // if the run broke on a surrogate pair, + // end it before the high surrogate + if (ch >= 0x10000) { + scriptEnd -= 1; + } + + break; + } + } + + return true; +} + +U_NAMESPACE_END diff --git a/src/3rdparty/icu/scriptrun.h b/src/3rdparty/icu/scriptrun.h new file mode 100644 index 0000000000..0a00001052 --- /dev/null +++ b/src/3rdparty/icu/scriptrun.h @@ -0,0 +1,159 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* + ******************************************************************************* + * + * Copyright (C) 1999-2003, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * file name: scrptrun.h + * + * created on: 10/17/2001 + * created by: Eric R. Mader + */ + +#ifndef __SCRPTRUN_H +#define __SCRPTRUN_H + +#include +#include +#include + +U_NAMESPACE_BEGIN + +struct ScriptRecord +{ + UChar32 startChar; + UChar32 endChar; + UScriptCode scriptCode; +}; + +struct ParenStackEntry +{ + int32_t pairIndex; + UScriptCode scriptCode; +}; + +class ScriptRun : public UObject { +public: + ScriptRun(); + + ScriptRun(const char16_t *chars, int32_t length); + + ScriptRun(const char16_t *chars, int32_t start, int32_t length); + + void reset(); + + void reset(int32_t start, int32_t count); + + void reset(const char16_t *chars, int32_t start, int32_t length); + + int32_t getScriptStart(); + + int32_t getScriptEnd(); + + UScriptCode getScriptCode(); + + UBool next(); + + /** + * ICU "poor man's RTTI", returns a UClassID for the actual class. + * + * @stable ICU 2.2 + */ + virtual inline UClassID getDynamicClassID() const override { return getStaticClassID(); } + + /** + * ICU "poor man's RTTI", returns a UClassID for this class. + * + * @stable ICU 2.2 + */ + static inline UClassID getStaticClassID() { return (UClassID)const_cast(&fgClassID); } + +private: + + static UBool sameScript(int32_t scriptOne, int32_t scriptTwo); + + int32_t charStart; + int32_t charLimit; + const char16_t *charArray; + + int32_t scriptStart; + int32_t scriptEnd; + UScriptCode scriptCode; + + ParenStackEntry parenStack[128]; + int32_t parenSP; + + static int8_t highBit(int32_t value); + static int32_t getPairIndex(UChar32 ch); + + static UChar32 pairedChars[]; + static const int32_t pairedCharCount; + static const int32_t pairedCharPower; + static const int32_t pairedCharExtra; + + /** + * The address of this static class variable serves as this class's ID + * for ICU "poor man's RTTI". + */ + static const char fgClassID; +}; + +inline ScriptRun::ScriptRun() +{ + reset(nullptr, 0, 0); +} + +inline ScriptRun::ScriptRun(const char16_t *chars, int32_t length) +{ + reset(chars, 0, length); +} + +inline ScriptRun::ScriptRun(const char16_t *chars, int32_t start, int32_t length) +{ + reset(chars, start, length); +} + +inline int32_t ScriptRun::getScriptStart() +{ + return scriptStart; +} + +inline int32_t ScriptRun::getScriptEnd() +{ + return scriptEnd; +} + +inline UScriptCode ScriptRun::getScriptCode() +{ + return scriptCode; +} + +inline void ScriptRun::reset() +{ + scriptStart = charStart; + scriptEnd = charStart; + scriptCode = USCRIPT_INVALID_CODE; + parenSP = -1; +} + +inline void ScriptRun::reset(int32_t start, int32_t length) +{ + charStart = start; + charLimit = start + length; + + reset(); +} + +inline void ScriptRun::reset(const char16_t *chars, int32_t start, int32_t length) +{ + charArray = chars; + + reset(start, length); +} + +U_NAMESPACE_END + +#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c1e76c073c..34daa354ac 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,6 +33,12 @@ add_files( CONDITION SSE_FOUND ) +add_files( + gfx_layout_icu.cpp + gfx_layout_icu.h + CONDITION ICU_i18n_FOUND AND HARFBUZZ_FOUND +) + add_files( aircraft.h aircraft_cmd.cpp @@ -179,6 +185,8 @@ add_files( gfx_func.h gfx_layout.cpp gfx_layout.h + gfx_layout_fallback.cpp + gfx_layout_fallback.h gfx_type.h gfxinit.cpp gfxinit.h diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index b08f90245e..48e26ddf08 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -364,8 +364,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * v->sprite_seq.Set(SPR_IMG_QUERY); u->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); - u->random_bits = VehicleRandomBits(); + v->random_bits = Random(); + u->random_bits = Random(); v->vehicle_flags = 0; if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SetBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE); @@ -398,7 +398,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * w->subtype = AIR_ROTOR; w->sprite_seq.Set(SPR_ROTOR_STOPPED); w->UpdateSpriteSeqBound(); - w->random_bits = VehicleRandomBits(); + w->random_bits = Random(); /* Use rotor's air.state to store the rotor animation frame */ w->state = HRS_ROTOR_STOPPED; w->UpdateDeltaXY(); diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 51b332da17..a64630f880 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -313,9 +313,8 @@ public: switch (widget) { case WID_AP_CLASS_DROPDOWN: { Dimension d = {0, 0}; - for (uint i = 0; AirportClass::IsClassIDValid((AirportClassID)i); i++) { - SetDParam(0, AirportClass::Get((AirportClassID)i)->name); - d = maxdim(d, GetStringBoundingBox(STR_BLACK_STRING)); + for (uint i = 0; i < AirportClass::GetClassCount(); i++) { + d = maxdim(d, GetStringBoundingBox(AirportClass::Get((AirportClassID)i)->name)); } d.width += padding.width; d.height += padding.height; @@ -360,9 +359,7 @@ public: StringID string = GetAirportTextCallback(as, layout, CBID_AIRPORT_ADDITIONAL_TEXT); if (string == STR_UNDEFINED) continue; - /* STR_BLACK_STRING is used to start the string with {BLACK} */ - SetDParam(0, string); - Dimension d = GetStringMultiLineBoundingBox(STR_BLACK_STRING, *size); + Dimension d = GetStringMultiLineBoundingBox(string, *size); *size = maxdim(d, *size); } } @@ -403,8 +400,7 @@ public: const AirportSpec *as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); StringID string = GetAirportTextCallback(as, _selected_airport_layout, CBID_AIRPORT_ADDITIONAL_TEXT); if (string != STR_UNDEFINED) { - SetDParam(0, string); - DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_BLACK_STRING); + DrawStringMultiLine(r.left, r.right, r.top, r.bottom, string, TC_BLACK); } } break; @@ -578,7 +574,7 @@ static const NWidgetPart _nested_build_airport_widgets[] = { EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 0), SetPIP(2, 0, 2), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_AIRPORT_CLASS_LABEL, STR_NULL), SetFill(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_AP_CLASS_DROPDOWN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_STATION_BUILD_AIRPORT_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_AP_CLASS_DROPDOWN), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_STATION_BUILD_AIRPORT_TOOLTIP), NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_AIRPORT_SPRITE), SetFill(1, 0), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_AP_AIRPORT_LIST), SetFill(1, 0), SetMatrixDataTip(1, 5, STR_STATION_BUILD_AIRPORT_TOOLTIP), SetScrollbar(WID_AP_SCROLLBAR), @@ -586,7 +582,7 @@ static const NWidgetPart _nested_build_airport_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_DECREASE), SetMinimalSize(12, 0), SetDataTip(AWV_DECREASE, STR_NULL), - NWidget(WWT_LABEL, COLOUR_GREY, WID_AP_LAYOUT_NUM), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NULL), + NWidget(WWT_LABEL, COLOUR_GREY, WID_AP_LAYOUT_NUM), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_NULL), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_INCREASE), SetMinimalSize(12, 0), SetDataTip(AWV_INCREASE, STR_NULL), EndContainer(), NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_EXTRA_TEXT), SetFill(1, 0), SetMinimalSize(150, 0), diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp index 23255fa4a4..004ec87135 100644 --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -8,6 +8,7 @@ /** @file articulated_vehicles.cpp Implementation of articulated vehicles. */ #include "stdafx.h" +#include "core/random_func.hpp" #include "train.h" #include "roadveh.h" #include "ship.h" @@ -467,7 +468,7 @@ void AddArticulatedParts(Vehicle *first) v->max_age = 0; v->engine_type = engine_type; v->value = 0; - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); if (type == VEH_SHIP) continue; diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 4cdd21c0a1..d3e3e8c282 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -770,7 +770,7 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = { NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_RAIL_ROAD_TYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), EndContainer(), diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 86606fafab..4f7ee90311 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -33,6 +33,9 @@ #include "train.h" #include "error.h" #include "zoom_func.h" +#include "querystring_gui.h" +#include "stringfilter_type.h" +#include "hotkeys.h" #include "widgets/build_vehicle_widget.h" @@ -54,7 +57,7 @@ uint GetEngineListHeight(VehicleType type) static const NWidgetPart _nested_build_vehicle_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -69,6 +72,7 @@ static const NWidgetPart _nested_build_vehicle_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BV_SHOW_HIDDEN_ENGINES), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_CARGO_FILTER_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA), EndContainer(), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_BV_FILTER), SetMinimalSize(128, 0), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), EndContainer(), /* Vehicle list. */ @@ -93,7 +97,7 @@ static const NWidgetPart _nested_build_vehicle_widgets[] = { static const NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -104,7 +108,7 @@ static const NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = { NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 0), - NWidget(WWT_LABEL, COLOUR_GREY, WID_BV_CAPTION_LOCO), SetDataTip(STR_WHITE_STRING, STR_NULL), SetResize(1, 0), SetFill(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY, WID_BV_CAPTION_LOCO), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE), SetResize(1, 0), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), @@ -142,7 +146,7 @@ static const NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = { NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 0), - NWidget(WWT_LABEL, COLOUR_GREY, WID_BV_CAPTION_WAGON), SetDataTip(STR_WHITE_STRING, STR_NULL), SetResize(1, 0), SetFill(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY, WID_BV_CAPTION_WAGON), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE), SetResize(1, 0), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), @@ -1056,31 +1060,44 @@ static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_ return y; } + /** - * Display additional text from NewGRF in the purchase information window - * @param left Left border of text bounding box - * @param right Right border of text bounding box - * @param y Top border of text bounding box - * @param engine Engine to query the additional purchase information for - * @return Bottom border of text bounding box + * Try to get the NewGRF engine additional text callback as an optional std::string. + * @param engine The engine whose additional text to get. + * @return The std::string if present, otherwise std::nullopt. */ -static uint ShowAdditionalText(int left, int right, int y, EngineID engine) +static std::optional GetNewGRFAdditionalText(EngineID engine) { uint16 callback = GetVehicleCallback(CBID_VEHICLE_ADDITIONAL_TEXT, 0, 0, engine, nullptr); - if (callback == CALLBACK_FAILED || callback == 0x400) return y; + if (callback == CALLBACK_FAILED || callback == 0x400) return std::nullopt; const GRFFile *grffile = Engine::Get(engine)->GetGRF(); assert(grffile != nullptr); if (callback > 0x400) { ErrorUnknownCallbackResult(grffile->grfid, CBID_VEHICLE_ADDITIONAL_TEXT, callback); - return y; + return std::nullopt; } StartTextRefStackUsage(grffile, 6); - uint result = DrawStringMultiLine(left, right, y, INT32_MAX, GetGRFStringID(grffile->grfid, 0xD000 + callback), TC_BLACK); + std::string result = GetString(GetGRFStringID(grffile->grfid, 0xD000 + callback)); StopTextRefStackUsage(); return result; } +/** + * Display additional text from NewGRF in the purchase information window + * @param left Left border of text bounding box + * @param right Right border of text bounding box + * @param y Top border of text bounding box + * @param engine Engine to query the additional purchase information for + * @return Bottom border of text bounding box + */ +static uint ShowAdditionalText(int left, int right, int y, EngineID engine) +{ + auto text = GetNewGRFAdditionalText(engine); + if (!text) return y; + return DrawStringMultiLine(left, right, y, INT32_MAX, *text, TC_BLACK); +} + void TestedEngineDetails::FillDefaultCapacities(const Engine *e) { this->cargo = e->GetDefaultCargoType(); @@ -1217,7 +1234,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li if (show_count) { replace_icon = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE); SetDParamMaxDigits(0, 3, FS_SMALL); - count_width = GetStringBoundingBox(STR_TINY_BLACK_COMMA).width; + count_width = GetStringBoundingBox(STR_JUST_COMMA, FS_SMALL).width; } Rect tr = ir.Indent(circle_width + WidgetDimensions::scaled.hsep_normal + sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position @@ -1256,7 +1273,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, item.engine_id, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(item.engine_id, _local_company), EIT_PURCHASE); if (show_count) { SetDParam(0, num_engines); - DrawString(cr.left, cr.right, y + small_text_y_offset, STR_TINY_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE); + DrawString(cr.left, cr.right, y + small_text_y_offset, STR_JUST_COMMA, TC_BLACK, SA_RIGHT | SA_FORCE, false, FS_SMALL); if (EngineHasReplacementForCompany(Company::Get(_local_company), item.engine_id, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset); } if (has_variants) { @@ -1297,6 +1314,11 @@ void DisplayVehicleSortDropDown(Window *w, const VehicleType vehicle_type, const ShowDropDownMenu(w, _engine_sort_listing[vehicle_type], selected, button, 0, hidden_mask); } +/** Enum referring to the Hotkeys in the build vehicle window */ +enum BuildVehicleHotkeys { + BVHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string +}; + struct BuildVehicleWindowBase : Window { VehicleType vehicle_type; ///< Type of vehicles shown in the window. bool virtual_train_mode; ///< Are we building a virtual train? @@ -1368,6 +1390,9 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { Scrollbar *vscroll; TestedEngineDetails te; ///< Tested cost and capacity after refit. + StringFilter string_filter; ///< Filter for vehicle name + QueryString vehicle_editbox; ///< Filter editbox + void SetBuyVehicleText() { NWidgetCore *widget = this->GetWidget(WID_BV_BUILD); @@ -1394,7 +1419,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { } } - BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type, Train **virtual_train_out) : BuildVehicleWindowBase(desc, tile, type, virtual_train_out) + BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type, Train **virtual_train_out) : BuildVehicleWindowBase(desc, tile, type, virtual_train_out), vehicle_editbox(MAX_LENGTH_VEHICLE_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_VEHICLE_NAME_CHARS) { this->sel_engine = INVALID_ENGINE; @@ -1433,6 +1458,9 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { this->FinishInitNested(this->window_number); + this->querystrings[WID_BV_FILTER] = &this->vehicle_editbox; + this->vehicle_editbox.cancel_button = QueryString::ACTION_CLEAR; + this->owner = (tile != INVALID_TILE) ? GetTileOwner(tile) : _local_company; this->eng_list.ForceRebuild(); @@ -1604,6 +1632,23 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { return CargoAndEngineFilter(&item, filter_type); } + /** Filter by name and NewGRF extra text */ + bool FilterByText(const Engine *e) + { + /* Do not filter if the filter text box is empty */ + if (this->string_filter.IsEmpty()) return true; + + /* Filter engine name */ + this->string_filter.ResetState(); + this->string_filter.AddLine(GetString(e->info.string_id)); + + /* Filter NewGRF extra text */ + auto text = GetNewGRFAdditionalText(e->index); + if (text) this->string_filter.AddLine(*text); + + return this->string_filter.GetState(); + } + /* Figure out what train EngineIDs to put in the list */ void GenerateBuildTrainList(GUIEngineList &list) { @@ -1628,6 +1673,9 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { /* Filter now! So num_engines and num_wagons is valid */ if (!FilterSingleEngine(eid)) continue; + /* Filter by name or NewGRF extra text */ + if (!FilterByText(e)) continue; + list.emplace_back(eid, e->info.variant_id, e->display_flags, 0); if (rvi->railveh_type != RAILVEH_WAGON) num_engines++; @@ -1674,6 +1722,9 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue; if (this->filter.roadtype != INVALID_ROADTYPE && !HasPowerOnRoad(e->u.road.roadtype, this->filter.roadtype)) continue; + /* Filter by name or NewGRF extra text */ + if (!FilterByText(e)) continue; + this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0); if (eid == this->sel_engine) sel_id = eid; @@ -1691,6 +1742,10 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { if (!this->show_hidden_engines && e->IsVariantHidden(_local_company)) continue; EngineID eid = e->index; if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue; + + /* Filter by name or NewGRF extra text */ + if (!FilterByText(e)) continue; + this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0); if (eid == this->sel_engine) sel_id = eid; @@ -1718,7 +1773,11 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { /* First VEH_END window_numbers are fake to allow a window open for all different types at once */ if (!this->listview_mode && !CanVehicleUseStation(eid, st)) continue; + /* Filter by name or NewGRF extra text */ + if (!FilterByText(e)) continue; + this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0); + if (eid == this->sel_engine) sel_id = eid; } @@ -2070,8 +2129,39 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { { this->vscroll->SetCapacityFromWidget(this, WID_BV_LIST); } + + void OnEditboxChanged(int wid) override + { + if (wid == WID_BV_FILTER) { + this->string_filter.SetFilterTerm(this->vehicle_editbox.text.buf); + this->InvalidateData(); + } + } + + EventState OnHotkey(int hotkey) override + { + switch (hotkey) { + case BVHK_FOCUS_FILTER_BOX: + this->SetFocusedWidget(WID_BV_FILTER); + SetFocusedWindow(this); // The user has asked to give focus to the text box, so make sure this window is focused. + return ES_HANDLED; + + default: + return ES_NOT_HANDLED; + } + + return ES_HANDLED; + } + + static HotkeyList hotkeys; }; +static Hotkey buildvehicle_hotkeys[] = { + Hotkey('F', "focus_filter_box", BVHK_FOCUS_FILTER_BOX), + HOTKEY_LIST_END +}; +HotkeyList BuildVehicleWindow::hotkeys("buildvehicle", buildvehicle_hotkeys); + static EngList_SortTypeFunction * const _sorter_loco[11] = { /* Locomotives */ &EngineNumberSorter, @@ -3080,7 +3170,8 @@ static WindowDesc _build_vehicle_desc( WDP_AUTO, "build_vehicle", 240, 268, WC_BUILD_VEHICLE, WC_NONE, WDF_CONSTRUCTION, - _nested_build_vehicle_widgets, lengthof(_nested_build_vehicle_widgets) + _nested_build_vehicle_widgets, lengthof(_nested_build_vehicle_widgets), + &BuildVehicleWindow::hotkeys ); static WindowDesc _build_template_vehicle_desc( diff --git a/src/company_gui.cpp b/src/company_gui.cpp index d44f649b24..e50d84c4ca 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1201,9 +1201,9 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY, WID_SCL_SPACER_DROPDOWN), SetMinimalSize(150, 12), SetFill(1, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_PRI_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1), SetDataTip(STR_BLACK_STRING, STR_LIVERY_PRIMARY_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_PRI_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1), SetDataTip(STR_JUST_STRING, STR_LIVERY_PRIMARY_TOOLTIP), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1), - SetDataTip(STR_BLACK_STRING, STR_LIVERY_SECONDARY_TOOLTIP), + SetDataTip(STR_JUST_STRING, STR_LIVERY_SECONDARY_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_SCL_MATRIX), SetMinimalSize(275, 0), SetResize(1, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_LIVERY_PANEL_TOOLTIP), SetScrollbar(WID_SCL_MATRIX_SCROLLBAR), @@ -1334,82 +1334,82 @@ static const NWidgetPart _nested_select_company_manager_face_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_EYECOLOUR, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_WHITE_STRING, STR_FACE_MOUSTACHE_EARRING_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_JUST_STRING, STR_FACE_MOUSTACHE_EARRING_TOOLTIP), SetTextStyle(TC_WHITE), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_GLASSES, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_WHITE_STRING, STR_FACE_GLASSES_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_JUST_STRING, STR_FACE_GLASSES_TOOLTIP), SetTextStyle(TC_WHITE), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_HAIR, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetDataTip(STR_WHITE_STRING, STR_FACE_HAIR_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetDataTip(STR_JUST_STRING, STR_FACE_HAIR_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_EYEBROWS, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetDataTip(STR_WHITE_STRING, STR_FACE_EYEBROWS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetDataTip(STR_JUST_STRING, STR_FACE_EYEBROWS_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_EYECOLOUR, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetDataTip(STR_WHITE_STRING, STR_FACE_EYECOLOUR_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetDataTip(STR_JUST_STRING, STR_FACE_EYECOLOUR_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_GLASSES, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetDataTip(STR_WHITE_STRING, STR_FACE_GLASSES_TOOLTIP_2), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetDataTip(STR_JUST_STRING, STR_FACE_GLASSES_TOOLTIP_2), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_NOSE, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetDataTip(STR_WHITE_STRING, STR_FACE_NOSE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetDataTip(STR_JUST_STRING, STR_FACE_NOSE_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_MOUSTACHE, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetDataTip(STR_WHITE_STRING, STR_FACE_LIPS_MOUSTACHE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetDataTip(STR_JUST_STRING, STR_FACE_LIPS_MOUSTACHE_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_CHIN, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetDataTip(STR_WHITE_STRING, STR_FACE_CHIN_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetDataTip(STR_JUST_STRING, STR_FACE_CHIN_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_JACKET, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetDataTip(STR_WHITE_STRING, STR_FACE_JACKET_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetDataTip(STR_JUST_STRING, STR_FACE_JACKET_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_COLLAR, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetDataTip(STR_WHITE_STRING, STR_FACE_COLLAR_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetDataTip(STR_JUST_STRING, STR_FACE_COLLAR_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0), SetPadding(WidgetDimensions::unscaled.framerect), SetDataTip(STR_FACE_EARRING, STR_NULL), SetTextStyle(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetDataTip(STR_WHITE_STRING, STR_FACE_TIE_EARRING_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetDataTip(STR_JUST_STRING, STR_FACE_TIE_EARRING_TOOLTIP), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP), EndContainer(), NWidget(NWID_SPACER), SetFill(0, 1), @@ -1973,8 +1973,7 @@ struct CompanyInfrastructureWindow : Window for (const auto &rt : _sorted_railtypes) { if (HasBit(this->railtypes, rt)) { rail_lines++; - SetDParam(0, GetRailTypeInfo(rt)->strings.name); - size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WidgetDimensions::scaled.hsep_indent); + size->width = std::max(size->width, GetStringBoundingBox(GetRailTypeInfo(rt)->strings.name).width + WidgetDimensions::scaled.hsep_indent); } } if (this->railtypes != RAILTYPES_NONE) { @@ -1995,8 +1994,7 @@ struct CompanyInfrastructureWindow : Window } else { tram_lines++; } - SetDParam(0, GetRoadTypeInfo(rt)->strings.name); - size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WidgetDimensions::scaled.hsep_indent); + size->width = std::max(size->width, GetStringBoundingBox(GetRoadTypeInfo(rt)->strings.name).width + WidgetDimensions::scaled.hsep_indent); } } @@ -2046,7 +2044,7 @@ struct CompanyInfrastructureWindow : Window max_cost = std::max(max_cost, AirportMaintenanceCost(c->index)); SetDParamMaxValue(0, max_val); - uint count_width = GetStringBoundingBox(STR_WHITE_COMMA).width + WidgetDimensions::scaled.hsep_indent; // Reserve some wiggle room + uint count_width = GetStringBoundingBox(STR_JUST_COMMA).width + WidgetDimensions::scaled.hsep_indent; // Reserve some wiggle room if (_settings_game.economy.infrastructure_maintenance) { SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year @@ -2073,7 +2071,7 @@ struct CompanyInfrastructureWindow : Window void DrawCountLine(int width, int &y, int count, Money monthly_cost) const { SetDParam(0, count); - DrawString(0, width, y += FONT_HEIGHT_NORMAL, STR_WHITE_COMMA, TC_FROMSTRING, SA_RIGHT); + DrawString(0, width, y += FONT_HEIGHT_NORMAL, STR_JUST_COMMA, TC_WHITE, SA_RIGHT); if (_settings_game.economy.infrastructure_maintenance) { SetDParam(0, monthly_cost * 12); // Convert to per year @@ -2109,8 +2107,7 @@ struct CompanyInfrastructureWindow : Window /* Draw name of each valid railtype. */ for (const auto &rt : _sorted_railtypes) { if (HasBit(this->railtypes, rt)) { - SetDParam(0, GetRailTypeInfo(rt)->strings.name); - DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, STR_WHITE_STRING); + DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, GetRailTypeInfo(rt)->strings.name, TC_WHITE); } } DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS); @@ -2127,7 +2124,7 @@ struct CompanyInfrastructureWindow : Window for (const auto &rt : _sorted_roadtypes) { if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt)) { SetDParam(0, GetRoadTypeInfo(rt)->strings.name); - DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, STR_WHITE_STRING); + DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, STR_JUST_STRING, TC_WHITE); } } @@ -2139,7 +2136,7 @@ struct CompanyInfrastructureWindow : Window for (const auto &rt : _sorted_roadtypes) { if (HasBit(this->roadtypes, rt) && RoadTypeIsTram(rt)) { SetDParam(0, GetRoadTypeInfo(rt)->strings.name); - DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, STR_WHITE_STRING); + DrawString(offs_left, width - offs_right, y += FONT_HEIGHT_NORMAL, STR_JUST_STRING, TC_WHITE); } } diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 02b7e11b27..1a6ea0f28e 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -2772,7 +2772,7 @@ DEF_CONSOLE_CMD(ConDumpRoadTypes) ); } for (const auto &grf : grfs) { - IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename); + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename.c_str()); } return true; } @@ -2830,7 +2830,7 @@ DEF_CONSOLE_CMD(ConDumpRailTypes) ); } for (const auto &grf : grfs) { - IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename); + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename.c_str()); } return true; } @@ -2882,7 +2882,7 @@ DEF_CONSOLE_CMD(ConDumpBridgeTypes) for (uint32 grfid : grfids) { extern GRFFile *GetFileByGRFID(uint32 grfid); const GRFFile *grffile = GetFileByGRFID(grfid); - IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grfid), grffile ? grffile->filename : "????"); + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grfid), grffile ? grffile->filename.c_str() : "????"); } return true; } @@ -2945,7 +2945,7 @@ DEF_CONSOLE_CMD(ConDumpCargoTypes) ); } for (const auto &grf : grfs) { - IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename); + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename.c_str()); } return true; } @@ -3372,7 +3372,7 @@ DEF_CONSOLE_CMD(ConNewGRFProfile) bool active = selected && profiler->active; TextColour tc = active ? TC_LIGHT_BLUE : selected ? TC_GREEN : CC_INFO; const char *statustext = active ? " (active)" : selected ? " (selected)" : ""; - IConsolePrintF(tc, "%d: [%08X] %s%s", i, BSWAP32(grf->grfid), grf->filename, statustext); + IConsolePrintF(tc, "%d: [%08X] %s%s", i, BSWAP32(grf->grfid), grf->filename.c_str(), statustext); i++; } return true; diff --git a/src/crashlog.cpp b/src/crashlog.cpp index d96e82c54a..c01d0f0330 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -56,9 +56,12 @@ # include # include FT_FREETYPE_H #endif /* WITH_FREETYPE */ -#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N) +#ifdef WITH_HARFBUZZ +# include +#endif /* WITH_HARFBUZZ */ +#ifdef WITH_ICU_I18N # include -#endif /* WITH_ICU_LX || WITH_ICU_I18N */ +#endif /* WITH_ICU_I18N */ #ifdef WITH_LIBLZMA # include #endif @@ -303,19 +306,18 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const buffer += seprintf(buffer, last, " FreeType: %d.%d.%d\n", major, minor, patch); #endif /* WITH_FREETYPE */ -#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N) +#if defined(WITH_HARFBUZZ) + buffer += seprintf(buffer, last, " HarfBuzz: %s\n", hb_version_string()); +#endif /* WITH_HARFBUZZ */ + +#if defined(WITH_ICU_I18N) /* 4 times 0-255, separated by dots (.) and a trailing '\0' */ char buf[4 * 3 + 3 + 1]; UVersionInfo ver; u_getVersion(ver); u_versionToString(ver, buf); -#ifdef WITH_ICU_I18N buffer += seprintf(buffer, last, " ICU i18n: %s\n", buf); -#endif -#ifdef WITH_ICU_LX - buffer += seprintf(buffer, last, " ICU lx: %s\n", buf); -#endif -#endif /* WITH_ICU_LX || WITH_ICU_I18N */ +#endif /* WITH_ICU_I18N */ #ifdef WITH_LIBLZMA buffer += seprintf(buffer, last, " LZMA: %s\n", lzma_version_string()); diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 63d00d5fe3..31d63f2dcc 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -331,7 +331,7 @@ struct DepotWindow : Window { SetDParam(0, CeilDiv(u->gcache.cached_total_length * 10, TILE_SIZE)); SetDParam(1, 1); Rect count = text.WithWidth(this->count_width - WidgetDimensions::scaled.hsep_normal, !rtl); - DrawString(count.left, count.right, count.bottom - FONT_HEIGHT_SMALL + 1, STR_TINY_BLACK_DECIMAL, TC_FROMSTRING, SA_RIGHT); // Draw the counter + DrawString(count.left, count.right, count.bottom - FONT_HEIGHT_SMALL + 1, STR_JUST_DECIMAL, TC_BLACK, SA_RIGHT, false, FS_SMALL); // Draw the counter break; } @@ -360,7 +360,7 @@ struct DepotWindow : Window { DrawSpriteIgnorePadding((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, flag, false, SA_CENTER); SetDParam(0, v->unitnumber); - DrawString(text, (uint16)(v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? STR_BLACK_COMMA : STR_RED_COMMA); + DrawString(text, STR_JUST_COMMA, (uint16)(v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? TC_BLACK : TC_RED); } } @@ -663,13 +663,13 @@ struct DepotWindow : Window { if (this->type == VEH_TRAIN) { SetDParamMaxValue(0, 1000, 0, FS_SMALL); SetDParam(1, 1); - this->count_width = GetStringBoundingBox(STR_TINY_BLACK_DECIMAL).width + WidgetDimensions::scaled.hsep_normal; + this->count_width = GetStringBoundingBox(STR_JUST_DECIMAL, FS_SMALL).width + WidgetDimensions::scaled.hsep_normal; } else { this->count_width = 0; } SetDParamMaxDigits(0, this->unitnumber_digits); - Dimension unumber = GetStringBoundingBox(STR_BLACK_COMMA); + Dimension unumber = GetStringBoundingBox(STR_JUST_COMMA); if (this->type == VEH_TRAIN || this->type == VEH_ROAD) { min_height = std::max(unumber.height, this->flag_size.height); diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index f8224a53ae..9f3c7f4e68 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -33,16 +33,17 @@ private: FT_Face face; ///< The font face associated with this font. void SetFontSize(FontSize fs, FT_Face face, int pixels); - virtual const void *InternalGetFontTable(uint32 tag, size_t &length); - virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa); + const void *InternalGetFontTable(uint32 tag, size_t &length) override; + const Sprite *InternalGetGlyph(GlyphID key, bool aa) override; public: FreeTypeFontCache(FontSize fs, FT_Face face, int pixels); ~FreeTypeFontCache(); - virtual void ClearFontCache(); - virtual GlyphID MapCharToGlyph(WChar key); - virtual const char *GetFontName() { return face->family_name; } - virtual bool IsBuiltInFont() { return false; } + void ClearFontCache() override; + GlyphID MapCharToGlyph(WChar key) override; + const char *GetFontName() override { return face->family_name; } + bool IsBuiltInFont() override { return false; } + const void *GetOSHandle() override { return &face; } }; FT_Library _library = nullptr; diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 75286d9688..7bd32a533a 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -736,7 +736,7 @@ static WindowDesc _framerate_display_desc( static const NWidgetPart _frametime_graph_window_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_FGW_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_FGW_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 99aa178c20..8a153b7d13 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -120,11 +120,11 @@ static char *PrintGrfInfo(char *buf, const char *last, uint grfid, const uint8 * } if (gc != nullptr) { - buf += seprintf(buf, last, ", filename: %s (md5sum matches)", gc->filename); + buf += seprintf(buf, last, ", filename: %s (md5sum matches)", gc->filename.c_str()); } else { gc = FindGRFConfig(grfid, FGCM_ANY); if (gc != nullptr) { - buf += seprintf(buf, last, ", filename: %s (matches GRFID only)", gc->filename); + buf += seprintf(buf, last, ", filename: %s (matches GRFID only)", gc->filename.c_str()); } else { buf += seprintf(buf, last, ", unknown GRF"); } diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index eb66dc9427..f276a2fb7a 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -156,23 +156,23 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { /* Snow line. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), SetFill(0, 1), EndContainer(), /* Rainforest line. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_RAINFOREST_LINE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_RAINFOREST_LINE_UP), SetFill(0, 1), EndContainer(), EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_WATER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), @@ -272,7 +272,7 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Heightmap highest peak. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), @@ -311,23 +311,23 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Snow line. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), SetFill(0, 1), EndContainer(), /* Rainforest line. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_RAINFOREST_LINE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_RAINFOREST_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_RAINFOREST_LINE_UP), SetFill(0, 1), EndContainer(), EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), @@ -668,7 +668,7 @@ struct GenerateLandscapeWindow : public Window { case WID_GL_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1)); - d = GetStringBoundingBox(STR_BLACK_DATE_LONG); + d = GetStringBoundingBox(STR_JUST_DATE_LONG); break; case WID_GL_MAPSIZE_X_PULLDOWN: @@ -1286,7 +1286,7 @@ struct CreateScenarioWindow : public Window switch (widget) { case WID_CS_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1)); - str = STR_BLACK_DATE_LONG; + str = STR_JUST_DATE_LONG; break; case WID_CS_MAPSIZE_X_PULLDOWN: @@ -1453,7 +1453,7 @@ static const NWidgetPart _nested_create_scenario_widgets[] = { NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetPadding(1, 0, 0, 0), NWidget(NWID_SPACER), SetMinimalSize(6, 0), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), EndContainer(), /* Flat map height. */ @@ -1462,7 +1462,7 @@ static const NWidgetPart _nested_create_scenario_widgets[] = { SetDataTip(STR_SE_MAPGEN_FLAT_WORLD_HEIGHT, STR_NULL), SetPadding(1, 0, 0, 0), NWidget(NWID_SPACER), SetMinimalSize(6, 0), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP), EndContainer(), EndContainer(), diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index e07027a00e..6ddb0c4b85 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -10,15 +10,15 @@ #include "stdafx.h" #include "gfx_layout.h" #include "string_func.h" -#include "strings_func.h" -#include "zoom_func.h" #include "debug.h" #include "table/control_codes.h" -#ifdef WITH_ICU_LX -#include -#endif /* WITH_ICU_LX */ +#include "gfx_layout_fallback.h" + +#if defined(WITH_ICU_I18N) && defined(WITH_HARFBUZZ) +#include "gfx_layout_icu.h" +#endif /* WITH_ICU_I18N && WITH_HARFBUZZ */ #ifdef WITH_UNISCRIBE #include "os/windows/string_uniscribe.h" @@ -49,553 +49,6 @@ Font::Font(FontSize size, TextColour colour) : assert(size < FS_END); } -#ifdef WITH_ICU_LX -/* Implementation details of LEFontInstance */ - -le_int32 Font::getUnitsPerEM() const -{ - return this->fc->GetUnitsPerEM(); -} - -le_int32 Font::getAscent() const -{ - return this->fc->GetAscender(); -} - -le_int32 Font::getDescent() const -{ - return -this->fc->GetDescender(); -} - -le_int32 Font::getLeading() const -{ - return this->fc->GetHeight(); -} - -float Font::getXPixelsPerEm() const -{ - return (float)this->fc->GetHeight(); -} - -float Font::getYPixelsPerEm() const -{ - return (float)this->fc->GetHeight(); -} - -float Font::getScaleFactorX() const -{ - return 1.0f; -} - -float Font::getScaleFactorY() const -{ - return 1.0f; -} - -const void *Font::getFontTable(LETag tableTag) const -{ - size_t length; - return this->getFontTable(tableTag, length); -} - -const void *Font::getFontTable(LETag tableTag, size_t &length) const -{ - return this->fc->GetFontTable(tableTag, length); -} - -LEGlyphID Font::mapCharToGlyph(LEUnicode32 ch) const -{ - if (IsTextDirectionChar(ch)) return 0; - return this->fc->MapCharToGlyph(ch); -} - -void Font::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const -{ - advance.fX = glyph == 0xFFFF ? 0 : this->fc->GetGlyphWidth(glyph); - advance.fY = 0; -} - -le_bool Font::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const -{ - return false; -} - -/** - * Wrapper for doing layouts with ICU. - */ -class ICUParagraphLayout : public ParagraphLayouter { - icu::ParagraphLayout *p; ///< The actual ICU paragraph layout. -public: - /** Visual run contains data about the bit of text with the same font. */ - class ICUVisualRun : public ParagraphLayouter::VisualRun { - const icu::ParagraphLayout::VisualRun *vr; ///< The actual ICU vr. - - public: - ICUVisualRun(const icu::ParagraphLayout::VisualRun *vr) : vr(vr) { } - - const Font *GetFont() const override { return (const Font*)vr->getFont(); } - int GetGlyphCount() const override { return vr->getGlyphCount(); } - const GlyphID *GetGlyphs() const override { return vr->getGlyphs(); } - const float *GetPositions() const override { return vr->getPositions(); } - int GetLeading() const override { return vr->getLeading(); } - const int *GetGlyphToCharMap() const override { return vr->getGlyphToCharMap(); } - }; - - /** A single line worth of VisualRuns. */ - class ICULine : public std::vector, public ParagraphLayouter::Line { - icu::ParagraphLayout::Line *l; ///< The actual ICU line. - - public: - ICULine(icu::ParagraphLayout::Line *l) : l(l) - { - for (int i = 0; i < l->countRuns(); i++) { - this->emplace_back(l->getVisualRun(i)); - } - } - ~ICULine() override { delete l; } - - int GetLeading() const override { return l->getLeading(); } - int GetWidth() const override { return l->getWidth(); } - int CountRuns() const override { return l->countRuns(); } - const ParagraphLayouter::VisualRun &GetVisualRun(int run) const override { return this->at(run); } - - int GetInternalCharLength(WChar c) const override - { - /* ICU uses UTF-16 internally which means we need to account for surrogate pairs. */ - return Utf8CharLen(c) < 4 ? 1 : 2; - } - }; - - ICUParagraphLayout(icu::ParagraphLayout *p) : p(p) { } - ~ICUParagraphLayout() override { delete p; } - void Reflow() override { p->reflow(); } - - std::unique_ptr NextLine(int max_width) override - { - icu::ParagraphLayout::Line *l = p->nextLine(max_width); - return std::unique_ptr(l == nullptr ? nullptr : new ICULine(l)); - } -}; - -/** - * Helper class to construct a new #ICUParagraphLayout. - */ -class ICUParagraphLayoutFactory { -public: - /** Helper for GetLayouter, to get the right type. */ - typedef UChar CharType; - /** Helper for GetLayouter, to get whether the layouter supports RTL. */ - static const bool SUPPORTS_RTL = true; - - static ParagraphLayouter *GetParagraphLayout(UChar *buff, UChar *buff_end, FontMap &fontMapping) - { - int32 length = buff_end - buff; - - if (length == 0) { - /* ICU's ParagraphLayout cannot handle empty strings, so fake one. */ - buff[0] = ' '; - length = 1; - fontMapping.back().first++; - } - - /* Fill ICU's FontRuns with the right data. */ - icu::FontRuns runs(fontMapping.size()); - for (auto &pair : fontMapping) { - runs.add(pair.second, pair.first); - } - - LEErrorCode status = LE_NO_ERROR; - /* ParagraphLayout does not copy "buff", so it must stay valid. - * "runs" is copied according to the ICU source, but the documentation does not specify anything, so this might break somewhen. */ - icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, nullptr, nullptr, nullptr, _current_text_dir == TD_RTL ? 1 : 0, false, status); - if (status != LE_NO_ERROR) { - delete p; - return nullptr; - } - - return new ICUParagraphLayout(p); - } - - static size_t AppendToBuffer(UChar *buff, const UChar *buffer_last, WChar c) - { - /* Transform from UTF-32 to internal ICU format of UTF-16. */ - int32 length = 0; - UErrorCode err = U_ZERO_ERROR; - u_strFromUTF32(buff, buffer_last - buff, &length, (UChar32*)&c, 1, &err); - return length; - } -}; -#endif /* WITH_ICU_LX */ - -/*** Paragraph layout ***/ -/** - * Class handling the splitting of a paragraph of text into lines and - * visual runs. - * - * One constructs this class with the text that needs to be split into - * lines. Then nextLine is called with the maximum width until nullptr is - * returned. Each nextLine call creates VisualRuns which contain the - * length of text that are to be drawn with the same font. In other - * words, the result of this class is a list of sub strings with their - * font. The sub strings are then already fully laid out, and only - * need actual drawing. - * - * The positions in a visual run are sequential pairs of X,Y of the - * begin of each of the glyphs plus an extra pair to mark the end. - * - * @note This variant does not handle left-to-right properly. This - * is supported in the one ParagraphLayout coming from ICU. - */ -class FallbackParagraphLayout : public ParagraphLayouter { -public: - /** Visual run contains data about the bit of text with the same font. */ - class FallbackVisualRun : public ParagraphLayouter::VisualRun { - Font *font; ///< The font used to layout these. - GlyphID *glyphs; ///< The glyphs we're drawing. - float *positions; ///< The positions of the glyphs. - int *glyph_to_char; ///< The char index of the glyphs. - int glyph_count; ///< The number of glyphs. - - public: - FallbackVisualRun(Font *font, const WChar *chars, int glyph_count, int x); - FallbackVisualRun(FallbackVisualRun &&other) noexcept; - ~FallbackVisualRun() override; - const Font *GetFont() const override; - int GetGlyphCount() const override; - const GlyphID *GetGlyphs() const override; - const float *GetPositions() const override; - int GetLeading() const override; - const int *GetGlyphToCharMap() const override; - }; - - /** A single line worth of VisualRuns. */ - class FallbackLine : public std::vector, public ParagraphLayouter::Line { - public: - int GetLeading() const override; - int GetWidth() const override; - int CountRuns() const override; - const ParagraphLayouter::VisualRun &GetVisualRun(int run) const override; - - int GetInternalCharLength(WChar c) const override { return 1; } - }; - - const WChar *buffer_begin; ///< Begin of the buffer. - const WChar *buffer; ///< The current location in the buffer. - FontMap &runs; ///< The fonts we have to use for this paragraph. - - FallbackParagraphLayout(WChar *buffer, int length, FontMap &runs); - void Reflow() override; - std::unique_ptr NextLine(int max_width) override; -}; - -/** - * Helper class to construct a new #FallbackParagraphLayout. - */ -class FallbackParagraphLayoutFactory { -public: - /** Helper for GetLayouter, to get the right type. */ - typedef WChar CharType; - /** Helper for GetLayouter, to get whether the layouter supports RTL. */ - static const bool SUPPORTS_RTL = false; - - /** - * Get the actual ParagraphLayout for the given buffer. - * @param buff The begin of the buffer. - * @param buff_end The location after the last element in the buffer. - * @param fontMapping THe mapping of the fonts. - * @return The ParagraphLayout instance. - */ - static ParagraphLayouter *GetParagraphLayout(WChar *buff, WChar *buff_end, FontMap &fontMapping) - { - return new FallbackParagraphLayout(buff, buff_end - buff, fontMapping); - } - - /** - * Append a wide character to the internal buffer. - * @param buff The buffer to append to. - * @param buffer_last The end of the buffer. - * @param c The character to add. - * @return The number of buffer spaces that were used. - */ - static size_t AppendToBuffer(WChar *buff, const WChar *buffer_last, WChar c) - { - *buff = c; - return 1; - } -}; - -/** - * Create the visual run. - * @param font The font to use for this run. - * @param chars The characters to use for this run. - * @param char_count The number of characters in this run. - * @param x The initial x position for this run. - */ -FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const WChar *chars, int char_count, int x) : - font(font), glyph_count(char_count) -{ - const bool isbuiltin = font->fc->IsBuiltInFont(); - - this->glyphs = MallocT(this->glyph_count); - this->glyph_to_char = MallocT(this->glyph_count); - - /* Positions contains the location of the begin of each of the glyphs, and the end of the last one. */ - this->positions = MallocT(this->glyph_count * 2 + 2); - this->positions[0] = x; - - for (int i = 0; i < this->glyph_count; i++) { - this->glyphs[i] = font->fc->MapCharToGlyph(chars[i]); - if (isbuiltin) { - this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender. - } else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) { - this->positions[2 * i + 1] = (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2; // Align sprite font to centre - } else { - this->positions[2 * i + 1] = 0; // No ascender adjustment. - } - this->positions[2 * i + 2] = this->positions[2 * i] + font->fc->GetGlyphWidth(this->glyphs[i]); - this->glyph_to_char[i] = i; - } -} - -/** Move constructor for visual runs.*/ -FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(FallbackVisualRun &&other) noexcept : font(other.font), glyph_count(other.glyph_count) -{ - this->positions = other.positions; - this->glyph_to_char = other.glyph_to_char; - this->glyphs = other.glyphs; - - other.positions = nullptr; - other.glyph_to_char = nullptr; - other.glyphs = nullptr; -} - -/** Free all data. */ -FallbackParagraphLayout::FallbackVisualRun::~FallbackVisualRun() -{ - free(this->positions); - free(this->glyph_to_char); - free(this->glyphs); -} - -/** - * Get the font associated with this run. - * @return The font. - */ -const Font *FallbackParagraphLayout::FallbackVisualRun::GetFont() const -{ - return this->font; -} - -/** - * Get the number of glyphs in this run. - * @return The number of glyphs. - */ -int FallbackParagraphLayout::FallbackVisualRun::GetGlyphCount() const -{ - return this->glyph_count; -} - -/** - * Get the glyphs of this run. - * @return The glyphs. - */ -const GlyphID *FallbackParagraphLayout::FallbackVisualRun::GetGlyphs() const -{ - return this->glyphs; -} - -/** - * Get the positions of this run. - * @return The positions. - */ -const float *FallbackParagraphLayout::FallbackVisualRun::GetPositions() const -{ - return this->positions; -} - -/** - * Get the glyph-to-character map for this visual run. - * @return The glyph-to-character map. - */ -const int *FallbackParagraphLayout::FallbackVisualRun::GetGlyphToCharMap() const -{ - return this->glyph_to_char; -} - -/** - * Get the height of this font. - * @return The height of the font. - */ -int FallbackParagraphLayout::FallbackVisualRun::GetLeading() const -{ - return this->GetFont()->fc->GetHeight(); -} - -/** - * Get the height of the line. - * @return The maximum height of the line. - */ -int FallbackParagraphLayout::FallbackLine::GetLeading() const -{ - int leading = 0; - for (const auto &run : *this) { - leading = std::max(leading, run.GetLeading()); - } - - return leading; -} - -/** - * Get the width of this line. - * @return The width of the line. - */ -int FallbackParagraphLayout::FallbackLine::GetWidth() const -{ - if (this->size() == 0) return 0; - - /* - * The last X position of a run contains is the end of that run. - * Since there is no left-to-right support, taking this value of - * the last run gives us the end of the line and thus the width. - */ - const auto &run = this->GetVisualRun(this->CountRuns() - 1); - return (int)run.GetPositions()[run.GetGlyphCount() * 2]; -} - -/** - * Get the number of runs in this line. - * @return The number of runs. - */ -int FallbackParagraphLayout::FallbackLine::CountRuns() const -{ - return (uint)this->size(); -} - -/** - * Get a specific visual run. - * @return The visual run. - */ -const ParagraphLayouter::VisualRun &FallbackParagraphLayout::FallbackLine::GetVisualRun(int run) const -{ - return this->at(run); -} - -/** - * Create a new paragraph layouter. - * @param buffer The characters of the paragraph. - * @param length The length of the paragraph. - * @param runs The font mapping of this paragraph. - */ -FallbackParagraphLayout::FallbackParagraphLayout(WChar *buffer, int length, FontMap &runs) : buffer_begin(buffer), buffer(buffer), runs(runs) -{ - assert(runs.End()[-1].first == length); -} - -/** - * Reset the position to the start of the paragraph. - */ -void FallbackParagraphLayout::Reflow() -{ - this->buffer = this->buffer_begin; -} - -/** - * Construct a new line with a maximum width. - * @param max_width The maximum width of the string. - * @return A Line, or nullptr when at the end of the paragraph. - */ -std::unique_ptr FallbackParagraphLayout::NextLine(int max_width) -{ - /* Simple idea: - * - split a line at a newline character, or at a space where we can break a line. - * - split for a visual run whenever a new line happens, or the font changes. - */ - if (this->buffer == nullptr) return nullptr; - - std::unique_ptr l(new FallbackLine()); - - if (*this->buffer == '\0') { - /* Only a newline. */ - this->buffer = nullptr; - l->emplace_back(this->runs.front().second, this->buffer, 0, 0); - return l; - } - - int offset = this->buffer - this->buffer_begin; - FontMap::iterator iter = this->runs.data(); - while (iter->first <= offset) { - iter++; - assert(iter != this->runs.End()); - } - - const FontCache *fc = iter->second->fc; - const WChar *next_run = this->buffer_begin + iter->first; - - const WChar *begin = this->buffer; - const WChar *last_space = nullptr; - const WChar *last_char; - int width = 0; - for (;;) { - WChar c = *this->buffer; - last_char = this->buffer; - - if (c == '\0') { - this->buffer = nullptr; - break; - } - - if (this->buffer == next_run) { - int w = l->GetWidth(); - l->emplace_back(iter->second, begin, this->buffer - begin, w); - iter++; - assert(iter != this->runs.End()); - - next_run = this->buffer_begin + iter->first; - begin = this->buffer; - } - - if (IsWhitespace(c)) last_space = this->buffer; - - if (IsPrintable(c) && !IsTextDirectionChar(c)) { - int char_width = GetCharacterWidth(fc->GetSize(), c); - width += char_width; - if (width > max_width) { - /* The string is longer than maximum width so we need to decide - * what to do with it. */ - if (width == char_width) { - /* The character is wider than allowed width; don't know - * what to do with this case... bail out! */ - this->buffer = nullptr; - return l; - } - - if (last_space == nullptr) { - /* No space has been found. Just terminate at our current - * location. This usually happens for languages that do not - * require spaces in strings, like Chinese, Japanese and - * Korean. For other languages terminating mid-word might - * not be the best, but terminating the whole string instead - * of continuing the word at the next line is worse. */ - last_char = this->buffer; - } else { - /* A space is found; perfect place to terminate */ - this->buffer = last_space + 1; - last_char = last_space; - } - break; - } - } - - this->buffer++; - } - - if (l->size() == 0 || last_char - begin > 0) { - int w = l->GetWidth(); - l->emplace_back(iter->second, begin, last_char - begin, w); - } - return l; -} - /** * Helper for getting a ParagraphLayouter of the given type. * @@ -640,8 +93,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str, /* Filter out non printable characters */ if (!IsPrintable(c)) continue; /* Filter out text direction characters that shouldn't be drawn, and - * will not be handled in the fallback non ICU case because they are - * mostly needed for RTL languages which need more ICU support. */ + * will not be handled in the fallback case because they are mostly + * needed for RTL languages which need more proper shaping support. */ if (!T::SUPPORTS_RTL && IsTextDirectionChar(c)) continue; buff += T::AppendToBuffer(buff, buffer_last, c); continue; @@ -693,21 +146,17 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi } else { /* Line is new, layout it */ FontState old_state = state; -#if defined(WITH_ICU_LX) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA) +#if (defined(WITH_ICU_I18N) && defined(WITH_HARFBUZZ)) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA) const char *old_str = str; #endif -#ifdef WITH_ICU_LX - GetLayouter(line, str, state); +#if defined(WITH_ICU_I18N) && defined(WITH_HARFBUZZ) if (line.layout == nullptr) { - static bool warned = false; - if (!warned) { - DEBUG(misc, 0, "ICU layouter bailed on the font. Falling back to the fallback layouter"); - warned = true; + GetLayouter(line, str, state); + if (line.layout == nullptr) { + state = old_state; + str = old_str; } - - state = old_state; - str = old_str; } #endif diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 7abf3d1389..7fca7ca082 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -21,13 +21,6 @@ #include #include -#ifdef WITH_ICU_LX -#include "layout/ParagraphLayout.h" -#define ICU_FONTINSTANCE : public icu::LEFontInstance -#else /* WITH_ICU_LX */ -#define ICU_FONTINSTANCE -#endif /* WITH_ICU_LX */ - /** * Text drawing parameters, which can change while drawing a line, but are kept between multiple parts * of the same text, e.g. on line breaks. @@ -83,30 +76,12 @@ struct FontState { /** * Container with information about a font. */ -class Font ICU_FONTINSTANCE { +class Font { public: FontCache *fc; ///< The font we are using. TextColour colour; ///< The colour this font has to be. Font(FontSize size, TextColour colour); - -#ifdef WITH_ICU_LX - /* Implementation details of LEFontInstance */ - - le_int32 getUnitsPerEM() const; - le_int32 getAscent() const; - le_int32 getDescent() const; - le_int32 getLeading() const; - float getXPixelsPerEm() const; - float getYPixelsPerEm() const; - float getScaleFactorX() const; - float getScaleFactorY() const; - const void *getFontTable(LETag tableTag) const; - const void *getFontTable(LETag tableTag, size_t &length) const; - LEGlyphID mapCharToGlyph(LEUnicode32 ch) const; - void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const; - le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const; -#endif /* WITH_ICU_LX */ }; /** Mapping from index to font. */ @@ -183,7 +158,7 @@ public: /** Item in the linecache */ struct LineCacheItem { /* Stuff that cannot be freed until the ParagraphLayout is freed */ - void *buffer; ///< Accessed by both ICU's and our ParagraphLayout::nextLine. + void *buffer; ///< Accessed by our ParagraphLayout::nextLine. FontMap runs; ///< Accessed by our ParagraphLayout::nextLine. FontState state_after; ///< Font state after the line. diff --git a/src/gfx_layout_fallback.cpp b/src/gfx_layout_fallback.cpp new file mode 100644 index 0000000000..dbb2f0cc28 --- /dev/null +++ b/src/gfx_layout_fallback.cpp @@ -0,0 +1,375 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file gfx_layout_fallback.cpp Handling of laying out text as fallback. */ + +#include "stdafx.h" + +#include "gfx_layout_fallback.h" +#include "string_func.h" +#include "zoom_func.h" + +#include "table/control_codes.h" + +#include "safeguards.h" + +/*** Paragraph layout ***/ +/** + * Class handling the splitting of a paragraph of text into lines and + * visual runs. + * + * One constructs this class with the text that needs to be split into + * lines. Then nextLine is called with the maximum width until nullptr is + * returned. Each nextLine call creates VisualRuns which contain the + * length of text that are to be drawn with the same font. In other + * words, the result of this class is a list of sub strings with their + * font. The sub strings are then already fully laid out, and only + * need actual drawing. + * + * The positions in a visual run are sequential pairs of X,Y of the + * begin of each of the glyphs plus an extra pair to mark the end. + * + * @note This variant does not handle right-to-left properly. + */ +class FallbackParagraphLayout : public ParagraphLayouter { +public: + /** Visual run contains data about the bit of text with the same font. */ + class FallbackVisualRun : public ParagraphLayouter::VisualRun { + Font *font; ///< The font used to layout these. + GlyphID *glyphs; ///< The glyphs we're drawing. + float *positions; ///< The positions of the glyphs. + int *glyph_to_char; ///< The char index of the glyphs. + int glyph_count; ///< The number of glyphs. + + public: + FallbackVisualRun(Font *font, const WChar *chars, int glyph_count, int x); + FallbackVisualRun(FallbackVisualRun &&other) noexcept; + ~FallbackVisualRun() override; + const Font *GetFont() const override; + int GetGlyphCount() const override; + const GlyphID *GetGlyphs() const override; + const float *GetPositions() const override; + int GetLeading() const override; + const int *GetGlyphToCharMap() const override; + }; + + /** A single line worth of VisualRuns. */ + class FallbackLine : public std::vector, public ParagraphLayouter::Line { + public: + int GetLeading() const override; + int GetWidth() const override; + int CountRuns() const override; + const ParagraphLayouter::VisualRun &GetVisualRun(int run) const override; + + int GetInternalCharLength(WChar c) const override { return 1; } + }; + + const WChar *buffer_begin; ///< Begin of the buffer. + const WChar *buffer; ///< The current location in the buffer. + FontMap &runs; ///< The fonts we have to use for this paragraph. + + FallbackParagraphLayout(WChar *buffer, int length, FontMap &runs); + void Reflow() override; + std::unique_ptr NextLine(int max_width) override; +}; + +/** + * Get the actual ParagraphLayout for the given buffer. + * @param buff The begin of the buffer. + * @param buff_end The location after the last element in the buffer. + * @param fontMapping THe mapping of the fonts. + * @return The ParagraphLayout instance. + */ +/* static */ ParagraphLayouter *FallbackParagraphLayoutFactory::GetParagraphLayout(WChar *buff, WChar *buff_end, FontMap &fontMapping) +{ + return new FallbackParagraphLayout(buff, buff_end - buff, fontMapping); +} + +/** + * Append a wide character to the internal buffer. + * @param buff The buffer to append to. + * @param buffer_last The end of the buffer. + * @param c The character to add. + * @return The number of buffer spaces that were used. + */ +/* static */ size_t FallbackParagraphLayoutFactory::AppendToBuffer(WChar *buff, const WChar *buffer_last, WChar c) +{ + *buff = c; + return 1; +} + +/** + * Create the visual run. + * @param font The font to use for this run. + * @param chars The characters to use for this run. + * @param char_count The number of characters in this run. + * @param x The initial x position for this run. + */ +FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const WChar *chars, int char_count, int x) : + font(font), glyph_count(char_count) +{ + const bool isbuiltin = font->fc->IsBuiltInFont(); + + this->glyphs = MallocT(this->glyph_count); + this->glyph_to_char = MallocT(this->glyph_count); + + /* Positions contains the location of the begin of each of the glyphs, and the end of the last one. */ + this->positions = MallocT(this->glyph_count * 2 + 2); + this->positions[0] = x; + + for (int i = 0; i < this->glyph_count; i++) { + this->glyphs[i] = font->fc->MapCharToGlyph(chars[i]); + if (isbuiltin) { + this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender. + } else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) { + this->positions[2 * i + 1] = (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2; // Align sprite font to centre + } else { + this->positions[2 * i + 1] = 0; // No ascender adjustment. + } + this->positions[2 * i + 2] = this->positions[2 * i] + font->fc->GetGlyphWidth(this->glyphs[i]); + this->glyph_to_char[i] = i; + } +} + +/** Move constructor for visual runs.*/ +FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(FallbackVisualRun &&other) noexcept : font(other.font), glyph_count(other.glyph_count) +{ + this->positions = other.positions; + this->glyph_to_char = other.glyph_to_char; + this->glyphs = other.glyphs; + + other.positions = nullptr; + other.glyph_to_char = nullptr; + other.glyphs = nullptr; +} + +/** Free all data. */ +FallbackParagraphLayout::FallbackVisualRun::~FallbackVisualRun() +{ + free(this->positions); + free(this->glyph_to_char); + free(this->glyphs); +} + +/** + * Get the font associated with this run. + * @return The font. + */ +const Font *FallbackParagraphLayout::FallbackVisualRun::GetFont() const +{ + return this->font; +} + +/** + * Get the number of glyphs in this run. + * @return The number of glyphs. + */ +int FallbackParagraphLayout::FallbackVisualRun::GetGlyphCount() const +{ + return this->glyph_count; +} + +/** + * Get the glyphs of this run. + * @return The glyphs. + */ +const GlyphID *FallbackParagraphLayout::FallbackVisualRun::GetGlyphs() const +{ + return this->glyphs; +} + +/** + * Get the positions of this run. + * @return The positions. + */ +const float *FallbackParagraphLayout::FallbackVisualRun::GetPositions() const +{ + return this->positions; +} + +/** + * Get the glyph-to-character map for this visual run. + * @return The glyph-to-character map. + */ +const int *FallbackParagraphLayout::FallbackVisualRun::GetGlyphToCharMap() const +{ + return this->glyph_to_char; +} + +/** + * Get the height of this font. + * @return The height of the font. + */ +int FallbackParagraphLayout::FallbackVisualRun::GetLeading() const +{ + return this->GetFont()->fc->GetHeight(); +} + +/** + * Get the height of the line. + * @return The maximum height of the line. + */ +int FallbackParagraphLayout::FallbackLine::GetLeading() const +{ + int leading = 0; + for (const auto &run : *this) { + leading = std::max(leading, run.GetLeading()); + } + + return leading; +} + +/** + * Get the width of this line. + * @return The width of the line. + */ +int FallbackParagraphLayout::FallbackLine::GetWidth() const +{ + if (this->size() == 0) return 0; + + /* + * The last X position of a run contains is the end of that run. + * Since there is no left-to-right support, taking this value of + * the last run gives us the end of the line and thus the width. + */ + const auto &run = this->GetVisualRun(this->CountRuns() - 1); + return (int)run.GetPositions()[run.GetGlyphCount() * 2]; +} + +/** + * Get the number of runs in this line. + * @return The number of runs. + */ +int FallbackParagraphLayout::FallbackLine::CountRuns() const +{ + return (uint)this->size(); +} + +/** + * Get a specific visual run. + * @return The visual run. + */ +const ParagraphLayouter::VisualRun &FallbackParagraphLayout::FallbackLine::GetVisualRun(int run) const +{ + return this->at(run); +} + +/** + * Create a new paragraph layouter. + * @param buffer The characters of the paragraph. + * @param length The length of the paragraph. + * @param runs The font mapping of this paragraph. + */ +FallbackParagraphLayout::FallbackParagraphLayout(WChar *buffer, int length, FontMap &runs) : buffer_begin(buffer), buffer(buffer), runs(runs) +{ + assert(runs.End()[-1].first == length); +} + +/** + * Reset the position to the start of the paragraph. + */ +void FallbackParagraphLayout::Reflow() +{ + this->buffer = this->buffer_begin; +} + +/** + * Construct a new line with a maximum width. + * @param max_width The maximum width of the string. + * @return A Line, or nullptr when at the end of the paragraph. + */ +std::unique_ptr FallbackParagraphLayout::NextLine(int max_width) +{ + /* Simple idea: + * - split a line at a newline character, or at a space where we can break a line. + * - split for a visual run whenever a new line happens, or the font changes. + */ + if (this->buffer == nullptr) return nullptr; + + std::unique_ptr l(new FallbackLine()); + + if (*this->buffer == '\0') { + /* Only a newline. */ + this->buffer = nullptr; + l->emplace_back(this->runs.front().second, this->buffer, 0, 0); + return l; + } + + int offset = this->buffer - this->buffer_begin; + FontMap::iterator iter = this->runs.data(); + while (iter->first <= offset) { + iter++; + assert(iter != this->runs.End()); + } + + const FontCache *fc = iter->second->fc; + const WChar *next_run = this->buffer_begin + iter->first; + + const WChar *begin = this->buffer; + const WChar *last_space = nullptr; + const WChar *last_char; + int width = 0; + for (;;) { + WChar c = *this->buffer; + last_char = this->buffer; + + if (c == '\0') { + this->buffer = nullptr; + break; + } + + if (this->buffer == next_run) { + int w = l->GetWidth(); + l->emplace_back(iter->second, begin, this->buffer - begin, w); + iter++; + assert(iter != this->runs.End()); + + next_run = this->buffer_begin + iter->first; + begin = this->buffer; + } + + if (IsWhitespace(c)) last_space = this->buffer; + + if (IsPrintable(c) && !IsTextDirectionChar(c)) { + int char_width = GetCharacterWidth(fc->GetSize(), c); + width += char_width; + if (width > max_width) { + /* The string is longer than maximum width so we need to decide + * what to do with it. */ + if (width == char_width) { + /* The character is wider than allowed width; don't know + * what to do with this case... bail out! */ + this->buffer = nullptr; + return l; + } + + if (last_space == nullptr) { + /* No space has been found. Just terminate at our current + * location. This usually happens for languages that do not + * require spaces in strings, like Chinese, Japanese and + * Korean. For other languages terminating mid-word might + * not be the best, but terminating the whole string instead + * of continuing the word at the next line is worse. */ + last_char = this->buffer; + } else { + /* A space is found; perfect place to terminate */ + this->buffer = last_space + 1; + last_char = last_space; + } + break; + } + } + + this->buffer++; + } + + if (l->size() == 0 || last_char - begin > 0) { + int w = l->GetWidth(); + l->emplace_back(iter->second, begin, last_char - begin, w); + } + return l; +} diff --git a/src/gfx_layout_fallback.h b/src/gfx_layout_fallback.h new file mode 100644 index 0000000000..15927ac001 --- /dev/null +++ b/src/gfx_layout_fallback.h @@ -0,0 +1,30 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file gfx_layout_fallback.h Functions related to laying out the texts as fallback. */ + +#ifndef GFX_LAYOUT_FALLBACK_H +#define GFX_LAYOUT_FALLBACK_H + +#include "gfx_layout.h" + +/** + * Helper class to construct a new #FallbackParagraphLayout. + */ +class FallbackParagraphLayoutFactory { +public: + /** Helper for GetLayouter, to get the right type. */ + typedef WChar CharType; + /** Helper for GetLayouter, to get whether the layouter supports RTL. */ + static const bool SUPPORTS_RTL = false; + + static ParagraphLayouter *GetParagraphLayout(WChar *buff, WChar *buff_end, FontMap &fontMapping); + static size_t AppendToBuffer(WChar *buff, const WChar *buffer_last, WChar c); +}; + + +#endif /* GFX_LAYOUT_FALLBACK_H */ diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp new file mode 100644 index 0000000000..d4160989a0 --- /dev/null +++ b/src/gfx_layout_icu.cpp @@ -0,0 +1,534 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file gfx_layout_icu.cpp Handling of laying out with ICU / Harfbuzz. */ + +#include "stdafx.h" +#include "gfx_layout_icu.h" + +#include "debug.h" +#include "strings_func.h" +#include "language.h" +#include "table/control_codes.h" +#include "zoom_func.h" + +#include "3rdparty/icu/scriptrun.h" + +#include +#include + +#include +#include + +#include + +#include "safeguards.h" + +/** harfbuzz doesn't use floats, so we need a value to scale position with to get sub-pixel precision. */ +constexpr float FONT_SCALE = 64.0; + +/** + * Helper class to store the information of all the runs of a paragraph in. + * + * During itemization, more and more information is filled in. + */ +class ICURun { +public: + int start; ///< Start of the run in the buffer. + int length; ///< Length of the run in the buffer. + UBiDiLevel level; ///< Embedding level of the run. + UScriptCode script; ///< Script of the run. + Font *font; ///< Font of the run. + + std::vector glyphs; ///< The glyphs of the run. Valid after Shape() is called. + std::vector advance; ///< The advance (width) of the glyphs. Valid after Shape() is called. + std::vector glyph_to_char; ///< The mapping from glyphs to characters. Valid after Shape() is called. + std::vector positions; ///< The positions of the glyphs. Valid after Shape() is called. + int total_advance; ///< The total advance of the run. Valid after Shape() is called. + + ICURun(int start, int length, UBiDiLevel level, UScriptCode script = USCRIPT_UNKNOWN, Font *font = nullptr) : start(start), length(length), level(level), script(script), font(font) {} + + void Shape(UChar *buff, size_t length); +}; + +/** + * Wrapper for doing layouts with ICU. + */ +class ICUParagraphLayout : public ParagraphLayouter { +public: + /** Visual run contains data about the bit of text with the same font. */ + class ICUVisualRun : public ParagraphLayouter::VisualRun { + private: + std::vector glyphs; + std::vector positions; + std::vector glyph_to_char; + + int total_advance; + const Font *font; + + public: + ICUVisualRun(const ICURun &run, int x); + + const GlyphID *GetGlyphs() const override { return this->glyphs.data(); } + const float *GetPositions() const override { return this->positions.data(); } + const int *GetGlyphToCharMap() const override { return this->glyph_to_char.data(); } + + const Font *GetFont() const override { return this->font; } + int GetLeading() const override { return this->font->fc->GetHeight(); } + int GetGlyphCount() const override { return this->glyphs.size(); } + int GetAdvance() const { return this->total_advance; } + }; + + /** A single line worth of VisualRuns. */ + class ICULine : public std::vector, public ParagraphLayouter::Line { + public: + int GetLeading() const override; + int GetWidth() const override; + int CountRuns() const override { return (uint)this->size(); } + const VisualRun &GetVisualRun(int run) const override { return this->at(run); } + + int GetInternalCharLength(WChar c) const override + { + /* ICU uses UTF-16 internally which means we need to account for surrogate pairs. */ + return c >= 0x010000U ? 2 : 1; + } + }; + +private: + std::vector runs; + UChar *buff; + size_t buff_length; + std::vector::iterator current_run; + int partial_offset; + +public: + ICUParagraphLayout(std::vector &runs, UChar *buff, size_t buff_length) : runs(runs), buff(buff), buff_length(buff_length) + { + this->Reflow(); + } + + ~ICUParagraphLayout() override { } + + void Reflow() override + { + this->current_run = this->runs.begin(); + this->partial_offset = 0; + } + + std::unique_ptr NextLine(int max_width) override; +}; + +/** + * Constructor for a new ICUVisualRun. + * + * It bases all information on the ICURun, which should already be shaped. + * + * @param run The ICURun to base the visual run on. + * @param x The offset of the run on the line. + */ +ICUParagraphLayout::ICUVisualRun::ICUVisualRun(const ICURun &run, int x) : + glyphs(run.glyphs), glyph_to_char(run.glyph_to_char), total_advance(run.total_advance), font(run.font) +{ + /* If there are no positions, the ICURun was not Shaped; that should never happen. */ + assert(run.positions.size() != 0); + this->positions.reserve(run.positions.size()); + + /* "positions" is an array of x/y. So we need to alternate. */ + bool is_x = true; + for (auto &position : run.positions) { + if (is_x) { + this->positions.push_back(position + x); + } else { + this->positions.push_back(position); + } + + is_x = !is_x; + } +} + +/** + * Shape a single run. + * + * @param buff The buffer of which a partial (depending on start/length of the run) will be shaped. + * @param length The length of the buffer. + */ +void ICURun::Shape(UChar *buff, size_t buff_length) { + auto hbfont = hb_ft_font_create_referenced(*(static_cast(font->fc->GetOSHandle()))); + hb_font_set_scale(hbfont, this->font->fc->GetFontSize() * FONT_SCALE, this->font->fc->GetFontSize() * FONT_SCALE); + + /* ICU buffer is in UTF-16. */ + auto hbbuf = hb_buffer_create(); + hb_buffer_add_utf16(hbbuf, reinterpret_cast(buff), buff_length, this->start, this->length); + + /* Set all the properties of this segment. */ + hb_buffer_set_direction(hbbuf, (this->level & 1) == 1 ? HB_DIRECTION_RTL : HB_DIRECTION_LTR); + hb_buffer_set_script(hbbuf, hb_script_from_string(uscript_getShortName(this->script), -1)); + hb_buffer_set_language(hbbuf, hb_language_from_string(_current_language->isocode, -1)); + hb_buffer_set_cluster_level(hbbuf, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES); + + /* Shape the segment. */ + hb_shape(hbfont, hbbuf, nullptr, 0); + + unsigned int glyph_count; + auto glyph_info = hb_buffer_get_glyph_infos(hbbuf, &glyph_count); + auto glyph_pos = hb_buffer_get_glyph_positions(hbbuf, &glyph_count); + + /* Make sure any former run is lost. */ + this->glyphs.clear(); + this->glyph_to_char.clear(); + this->positions.clear(); + this->advance.clear(); + + /* Reserve space, as we already know the size. */ + this->glyphs.reserve(glyph_count); + this->glyph_to_char.reserve(glyph_count); + this->positions.reserve(glyph_count * 2 + 2); + this->advance.reserve(glyph_count); + + /* Prepare the glyphs/position. ICUVisualRun will give the position an offset if needed. */ + hb_position_t advance = 0; + for (unsigned int i = 0; i < glyph_count; i++) { + int x_advance; + + if (buff[glyph_info[i].cluster] >= SCC_SPRITE_START && buff[glyph_info[i].cluster] <= SCC_SPRITE_END) { + auto glyph = this->font->fc->MapCharToGlyph(buff[glyph_info[i].cluster]); + + this->glyphs.push_back(glyph); + this->positions.push_back(advance); + this->positions.push_back((this->font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->font->fc->GetSize()))) / 2); // Align sprite font to centre + x_advance = this->font->fc->GetGlyphWidth(glyph); + } else { + this->glyphs.push_back(glyph_info[i].codepoint); + this->positions.push_back(glyph_pos[i].x_offset / FONT_SCALE + advance); + this->positions.push_back(glyph_pos[i].y_offset / FONT_SCALE); + x_advance = glyph_pos[i].x_advance / FONT_SCALE; + } + + this->glyph_to_char.push_back(glyph_info[i].cluster); + this->advance.push_back(x_advance); + advance += x_advance; + } + + /* Position has one more element to close off the array. */ + this->positions.push_back(advance); + this->positions.push_back(0); + + /* Track the total advancement we made. */ + this->total_advance = advance; + + hb_buffer_destroy(hbbuf); + hb_font_destroy(hbfont); +} + +/** + * Get the height of the line. + * @return The maximum height of the line. + */ +int ICUParagraphLayout::ICULine::GetLeading() const +{ + int leading = 0; + for (const auto &run : *this) { + leading = std::max(leading, run.GetLeading()); + } + + return leading; +} + +/** + * Get the width of this line. + * @return The width of the line. + */ +int ICUParagraphLayout::ICULine::GetWidth() const +{ + int length = 0; + for (const auto &run : *this) { + length += run.GetAdvance(); + } + + return length; +} + +/** + * Itemize the string into runs per embedding level. + * + * Later on, based on the levels, we can deduce the order of a subset of runs. + * + * @param buff The string to itemize. + * @param length The length of the string. + * @return The runs. + */ +std::vector ItemizeBidi(UChar *buff, size_t length) +{ + auto ubidi = ubidi_open(); + + auto parLevel = _current_text_dir == TD_RTL ? UBIDI_RTL : UBIDI_LTR; + + UErrorCode err = U_ZERO_ERROR; + ubidi_setPara(ubidi, buff, length, parLevel, nullptr, &err); + if (U_FAILURE(err)) { + DEBUG(fontcache, 0, "Failed to set paragraph: %s", u_errorName(err)); + ubidi_close(ubidi); + return std::vector(); + } + + int32_t count = ubidi_countRuns(ubidi, &err); + if (U_FAILURE(err)) { + DEBUG(fontcache, 0, "Failed to count runs: %s", u_errorName(err)); + ubidi_close(ubidi); + return std::vector(); + } + + std::vector runs; + runs.reserve(count); + + /* Find the breakpoints for the logical runs. So we get runs that say "from START to END". */ + int32_t logical_pos = 0; + while (static_cast(logical_pos) < length) { + auto start_pos = logical_pos; + + /* Fetch the embedding level, so we can order bidi correctly later on. */ + UBiDiLevel level; + ubidi_getLogicalRun(ubidi, start_pos, &logical_pos, &level); + + runs.emplace_back(ICURun(start_pos, logical_pos - start_pos, level)); + } + + assert(static_cast(count) == runs.size()); + + ubidi_close(ubidi); + return runs; +} + +/** + * Itemize the string into runs per script, based on the previous created runs. + * + * Basically, this always returns the same or more runs than given. + * + * @param buff The string to itemize. + * @param length The length of the string. + * @param runs_current The current runs. + * @return The runs. + */ +std::vector ItemizeScript(UChar *buff, size_t length, std::vector &runs_current) +{ + std::vector runs; + icu::ScriptRun script_itemizer(buff, length); + + int cur_pos = 0; + auto cur_run = runs_current.begin(); + while (true) { + while (cur_pos < script_itemizer.getScriptEnd() && cur_run != runs_current.end()) { + int stop_pos = std::min(script_itemizer.getScriptEnd(), cur_run->start + cur_run->length); + assert(stop_pos - cur_pos > 0); + + runs.push_back(ICURun(cur_pos, stop_pos - cur_pos, cur_run->level, script_itemizer.getScriptCode())); + + if (stop_pos == cur_run->start + cur_run->length) cur_run++; + cur_pos = stop_pos; + } + + if (!script_itemizer.next()) break; + } + + return runs; +} + +/** + * Itemize the string into runs per style, based on the previous created runs. + * + * Basically, this always returns the same or more runs than given. + * + * @param buff The string to itemize. + * @param length The length of the string. + * @param runs_current The current runs. + * @param font_mapping The font mapping. + * @return The runs. + */ +std::vector ItemizeStyle(UChar *buff, size_t length, std::vector &runs_current, FontMap &font_mapping) +{ + std::vector runs; + + int cur_pos = 0; + auto cur_run = runs_current.begin(); + for (auto const &font_map : font_mapping) { + while (cur_pos < font_map.first && cur_run != runs_current.end()) { + int stop_pos = std::min(font_map.first, cur_run->start + cur_run->length); + assert(stop_pos - cur_pos > 0); + + runs.push_back(ICURun(cur_pos, stop_pos - cur_pos, cur_run->level, cur_run->script, font_map.second)); + + if (stop_pos == cur_run->start + cur_run->length) cur_run++; + cur_pos = stop_pos; + } + } + + return runs; +} + +/* static */ ParagraphLayouter *ICUParagraphLayoutFactory::GetParagraphLayout(UChar *buff, UChar *buff_end, FontMap &font_mapping) +{ + size_t length = buff_end - buff; + /* Can't layout an empty string. */ + if (length == 0) return nullptr; + + /* Can't layout our in-built sprite fonts. */ + for (auto const &pair : font_mapping) { + if (pair.second->fc->IsBuiltInFont()) return nullptr; + } + + auto runs = ItemizeBidi(buff, length); + runs = ItemizeScript(buff, length, runs); + runs = ItemizeStyle(buff, length, runs, font_mapping); + + if (runs.size() == 0) return nullptr; + + for (auto &run : runs) { + run.Shape(buff, length); + } + + return new ICUParagraphLayout(runs, buff, length); +} + +std::unique_ptr ICUParagraphLayout::NextLine(int max_width) +{ + std::vector::iterator start_run = this->current_run; + std::vector::iterator last_run = this->current_run; + + if (start_run == this->runs.end()) return nullptr; + + int cur_width = 0; + + /* Add remaining width of the first run if it is a broken run. */ + if (this->partial_offset > 0) { + if ((start_run->level & 1) == 0) { + for (size_t i = this->partial_offset; i < start_run->advance.size(); i++) { + cur_width += start_run->advance[i]; + } + } else { + for (int i = 0; i < this->partial_offset; i++) { + cur_width += start_run->advance[i]; + } + } + last_run++; + } + + /* Gather runs until the line is full. */ + while (last_run != this->runs.end() && cur_width < max_width) { + cur_width += last_run->total_advance; + last_run++; + } + + /* If the text does not fit into the available width, find a suitable breaking point. */ + int new_partial_length = 0; + if (cur_width > max_width) { + auto locale = icu::Locale(_current_language->isocode); + + /* Create a break-iterator to find a good place to break lines. */ + UErrorCode err = U_ZERO_ERROR; + auto break_iterator = icu::BreakIterator::createLineInstance(locale, err); + break_iterator->setText(icu::UnicodeString(this->buff, this->buff_length)); + + auto overflow_run = last_run - 1; + + /* Find the last glyph that fits. */ + size_t index; + if ((overflow_run->level & 1) == 0) { + /* LTR */ + for (index = overflow_run->glyphs.size(); index > 0; index--) { + cur_width -= overflow_run->advance[index - 1]; + if (cur_width <= max_width) break; + } + index--; + } else { + /* RTL */ + for (index = 0; index < overflow_run->glyphs.size(); index++) { + cur_width -= overflow_run->advance[index]; + if (cur_width <= max_width) break; + } + } + + /* Find the character that matches; this is the start of the cluster. */ + auto char_pos = overflow_run->glyph_to_char[index]; + + /* See if there is a good breakpoint inside this run. */ + int32_t break_pos = break_iterator->preceding(char_pos + 1); + if (break_pos != icu::BreakIterator::DONE && break_pos > overflow_run->start + this->partial_offset) { + /* There is a line-break inside this run that is suitable. */ + new_partial_length = break_pos - overflow_run->start - this->partial_offset; + } else if (overflow_run != start_run) { + /* There is no suitable line-break in this run, but it is also not + * the only run on this line. So we remove the run. */ + last_run--; + } else { + /* There is no suitable line-break and this is the only run on the + * line. So we break at the cluster. This is not pretty, but the + * best we can do. */ + new_partial_length = char_pos - this->partial_offset; + } + } + + /* Reorder the runs on this line for display. */ + std::vector bidi_level; + for (auto run = start_run; run != last_run; run++) { + bidi_level.push_back(run->level); + } + std::vector vis_to_log(bidi_level.size()); + ubidi_reorderVisual(bidi_level.data(), bidi_level.size(), vis_to_log.data()); + + /* Create line. */ + std::unique_ptr line(new ICULine()); + + int cur_pos = 0; + for (auto &i : vis_to_log) { + auto i_run = start_run + i; + /* Copy the ICURun here, so we can modify it in case of a partial. */ + ICURun run = *i_run; + + if (i_run == last_run - 1 && new_partial_length > 0) { + if (i_run == start_run && this->partial_offset > 0) { + assert(run.length > this->partial_offset); + run.start += this->partial_offset; + run.length -= this->partial_offset; + } + + assert(run.length > new_partial_length); + run.length = new_partial_length; + + run.Shape(this->buff, this->buff_length); + } else if (i_run == start_run && this->partial_offset > 0) { + assert(run.length > this->partial_offset); + + run.start += this->partial_offset; + run.length -= this->partial_offset; + + run.Shape(this->buff, this->buff_length); + } + + auto total_advance = run.total_advance; + line->emplace_back(std::move(run), cur_pos); + cur_pos += total_advance; + } + + if (new_partial_length > 0) { + this->current_run = last_run - 1; + this->partial_offset += new_partial_length; + } else { + this->current_run = last_run; + this->partial_offset = 0; + } + + return line; +} + +/* static */ size_t ICUParagraphLayoutFactory::AppendToBuffer(UChar *buff, const UChar *buffer_last, WChar c) +{ + /* Transform from UTF-32 to internal ICU format of UTF-16. */ + int32 length = 0; + UErrorCode err = U_ZERO_ERROR; + u_strFromUTF32(buff, buffer_last - buff, &length, (UChar32*)&c, 1, &err); + return length; +} diff --git a/src/gfx_layout_icu.h b/src/gfx_layout_icu.h new file mode 100644 index 0000000000..2aff3cb555 --- /dev/null +++ b/src/gfx_layout_icu.h @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file gfx_layout_icu.h Functions related to laying out the texts with ICU. */ + +#ifndef GFX_LAYOUT_ICU_H +#define GFX_LAYOUT_ICU_H + +#include "gfx_layout.h" + +#include + +/** + * Helper class to construct a new #ICUParagraphLayout. + */ +class ICUParagraphLayoutFactory { +public: + /** Helper for GetLayouter, to get the right type. */ + typedef UChar CharType; + /** Helper for GetLayouter, to get whether the layouter supports RTL. */ + static const bool SUPPORTS_RTL = true; + + static ParagraphLayouter *GetParagraphLayout(UChar *buff, UChar *buff_end, FontMap &fontMapping); + static size_t AppendToBuffer(UChar *buff, const UChar *buffer_last, WChar c); +}; + +#endif /* GFX_LAYOUT_ICU_H */ diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index c97db7bdf5..72879d0287 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -417,16 +417,16 @@ static const NWidgetPart _nested_goal_question_widgets_question[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_3), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), @@ -444,16 +444,16 @@ static const NWidgetPart _nested_goal_question_widgets_info[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_3), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), @@ -471,16 +471,16 @@ static const NWidgetPart _nested_goal_question_widgets_warning[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_3), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), @@ -498,16 +498,16 @@ static const NWidgetPart _nested_goal_question_widgets_error[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_3), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 8fd39e67d1..e4ba7095e2 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1209,7 +1209,7 @@ struct PerformanceRatingDetailWindow : Window { score_info_width = std::max(score_info_width, GetStringBoundingBox(STR_PERFORMANCE_DETAIL_VEHICLES + i).width); } SetDParamMaxValue(0, 1000); - score_info_width += GetStringBoundingBox(STR_BLACK_COMMA).width + WidgetDimensions::scaled.hsep_wide; + score_info_width += GetStringBoundingBox(STR_JUST_COMMA).width + WidgetDimensions::scaled.hsep_wide; SetDParamMaxValue(0, 100); this->bar_width = GetStringBoundingBox(STR_PERFORMANCE_DETAIL_PERCENT).width + WidgetDimensions::scaled.hsep_indent * 2; // Wide bars! @@ -1295,7 +1295,7 @@ struct PerformanceRatingDetailWindow : Window { /* Draw the score */ SetDParam(0, score); - DrawString(this->score_info_left, this->score_info_right, text_top, STR_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT); + DrawString(this->score_info_left, this->score_info_right, text_top, STR_JUST_COMMA, TC_BLACK, SA_RIGHT); /* Calculate the %-bar */ uint x = Clamp(val, 0, needed) * this->bar_width / needed; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index ecb03a66f2..e651a9f38f 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -103,7 +103,7 @@ static const NWidgetPart _nested_group_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(1, 0), SetFill(1, 1), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), - SetDataTip(STR_BLACK_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP), + SetDataTip(STR_JUST_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP), @@ -355,7 +355,7 @@ private: int num_vehicle = GroupStatistics::Get(this->vli.company, g_id, this->vli.vtype).num_vehicle; if (IsAllGroupID(g_id) || IsDefaultGroupID(g_id) || num_vehicle_with_subgroups == num_vehicle) { SetDParam(0, num_vehicle); - DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_TINY_COMMA, colour, SA_RIGHT | SA_FORCE); + DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_JUST_COMMA, colour, SA_RIGHT | SA_FORCE, false, FS_SMALL); } else { SetDParam(0, num_vehicle); SetDParam(1, num_vehicle_with_subgroups - num_vehicle); diff --git a/src/infrastructure.cpp b/src/infrastructure.cpp index c95e9c4d64..297b25f536 100644 --- a/src/infrastructure.cpp +++ b/src/infrastructure.cpp @@ -308,8 +308,7 @@ bool CheckSharingChangePossible(VehicleType type, bool new_value) } if (error_message != STR_NULL) { - SetDParam(0, error_message); - ShowErrorMessage(STR_WHITE_STRING, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(error_message, INVALID_STRING_ID, WL_ERROR); return false; } diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 42282eadd1..a42c1bb793 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -901,6 +901,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Plak die # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spel Opsies + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Geldeenheid STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Geld eendheid keuse @@ -5208,33 +5212,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 67d935c537..118ae3b32c 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -895,6 +895,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}لصق # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}إعدادات اللعبه + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}وحدة العملة STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}اختيار وحدة العملة @@ -4908,33 +4912,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/basque.txt b/src/lang/basque.txt index e32b0e7fce..4e7b412531 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -877,6 +877,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Leiho ho # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Jokoaren Aukerak + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Diru unitateak STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Diru unitatearen aukeraketa @@ -4942,33 +4946,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 13c87bba55..ce9dcf18c4 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1210,6 +1210,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Пера # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Наладкі гульні + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Валюта STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Выбар валюты @@ -5680,33 +5684,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index c22603ab11..d07bdfeeea 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -931,6 +931,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colar a # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetárias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Seleção de unidades monetárias @@ -3802,8 +3806,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in STR_VEHICLE_LIST_REPLACE_VEHICLES :Substituir veículos STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para Manutenção STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lucro anual: {CURRENCY_LONG} (último ano: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar para Depósito STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar para Garagem @@ -5579,33 +5581,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 6d3d6c50ce..e8640a368f 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -883,6 +883,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Прем # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Настройки + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Парична единица STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Избор на парична единица @@ -5031,33 +5035,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index aa0750bed2..864f2a5951 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -931,6 +931,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copia el # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opcions de la partida + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Moneda STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecció de la unitat monetària @@ -3802,8 +3806,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in STR_VEHICLE_LIST_REPLACE_VEHICLES :Substitueix vehicles STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envia a fer revisió STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Benefici enguany: {CURRENCY_LONG} (darrer any: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Envia a la cotxera STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Envia a la cotxera @@ -5579,33 +5581,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index acf95424bc..cf6eb6e1a6 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -482,6 +482,10 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт # Game options window + + + + ###length 42 STR_GAME_OPTIONS_CURRENCY_RUR :Вырӑсла тенкӗ (RUR) @@ -1816,33 +1820,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index f2f2cf5c58..6efb4d1453 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1000,6 +1000,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiraj # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Postavke igre + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Novčane jedinice STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbor novčanih jedinica @@ -5434,33 +5438,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 86fa247924..ee69c292d2 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1016,6 +1016,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Nastavit # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Možnosti hry + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Měna STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výběr jednotek měny @@ -3891,8 +3895,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Poslat p STR_VEHICLE_LIST_REPLACE_VEHICLES :Vyměňování vozidel STR_VEHICLE_LIST_SEND_FOR_SERVICING :Provést údržbu STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Letošní zisk: {CURRENCY_LONG} (vloni: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Poslat do depa STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslat do depa @@ -5794,33 +5796,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 7e2aac1fd7..a648b53474 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -930,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bevæg h # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opsætning + +STR_GAME_OPTIONS_TAB_GENERAL :Generel +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Vælg generelle indstillinger +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafik +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Vælg grafikindstillinger +STR_GAME_OPTIONS_TAB_SOUND :Lyd +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Vælg lyd og musik indstillinger + +STR_GAME_OPTIONS_VOLUME :Lydstyrke +STR_GAME_OPTIONS_SFX_VOLUME :Lydeffekter +STR_GAME_OPTIONS_MUSIC_VOLUME :musik + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhed STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af valutaenhed @@ -983,6 +1001,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Vælg in # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Fra +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Hvert 10. minut +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Hvert 30. minut +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Hvert 60. minut +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Hvert 120. minut STR_GAME_OPTIONS_LANGUAGE :{BLACK}Sprog STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Vælg sprog til brugerfladen @@ -1708,7 +1730,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hvor meget huko STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Service intervaller er i procent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Vælg om vedligeholdelse bliver udløst af forløbet tid, eller pålideligheden som falder en givet procenttal i forhold til maximum pålideligheden +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Når den er aktiveret, forsøger køretøjer at servicere, når deres pålidelighed falder med en given procentdel af den maksimale pålidelighed.Hvis f.eks. et køretøjs maksimale pålidelighed er 90 %, og serviceintervallet er 20 %, vil køretøjet forsøge at servicere, når den når 72 % pålidelighed. STR_CONFIG_SETTING_SERVINT_TRAINS :Standard vedligeholdelses interval for tog: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Sæt serviceintervallets standardværdi for nye skinnekøretøjer. @@ -1913,6 +1935,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ingen STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Startværdi for bystørrelsesfaktor: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gennemsnitlig størrelse af storbyer i forhold til normale byer ved start af spillet +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Opdater distributionsgraf hver {STRING}{NBSP}sekund{P 0:2 "" er} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellem efterfølgende genberegninger af linkgrafen. Hver genberegning beregner planerne for én komponent af grafen. Det betyder, at en værdi X for denne indstilling ikke betyder, at hele grafen vil blive opdateret hvert X sekund. Kun en komponent vil. Jo kortere du indstiller det, jo mere CPU-tid vil være nødvendigt for at beregne det. Jo længere du indstiller det, jo længere tid vil det tage, før godsfordelingen starter på nye ruter. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Tag {STRING}{NBSP}sekund{P 0:2 "" er} til genberegning af fordelingsgraf +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid det tager for hver genberegning af en linkgrafkomponent. Når en genberegning startes, dannes en tråd, som får lov til at køre i dette antal sekunder. Jo kortere du indstiller dette, jo mere sandsynligt er det, at tråden ikke er færdig, når den skal. Så stopper spillet, indtil det er ("lag"). Jo længere du indstiller det, jo længere tid tager det for distributionen at blive opdateret, når ruter ændres. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionsmodel for passagerer: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetrisk" betyder, at omtrent det samme antal passagerer vil gå fra en station A til en station B som fra B til A. "Asymmetrisk" betyder, at vilkårlige antal passagerer kan gå i begge retninger. "Manuel" betyder, at der ikke finder nogen automatisk distribution sted for passagerer. @@ -3801,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send ins STR_VEHICLE_LIST_REPLACE_VEHICLES :Udskift køretøjer STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send til eftersyn STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Afkast i år: {CURRENCY_LONG} (sidste år: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send til remise STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send til værksted @@ -4569,6 +4593,7 @@ STR_AI_CONFIG_RANDOM_AI :Tilfældig comp STR_AI_CONFIG_NONE :(ingen) STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maksimalt antal modstandere: {ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Interval mellem konkurrenternes start: {ORANGE}{COMMA} minut{P "" er} STR_AI_CONFIG_MOVE_UP :{BLACK}Flyt op STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Flyt valgte computerspiller op i listen @@ -5083,6 +5108,7 @@ STR_ERROR_NO_BUOY :{WHITE}Der er i STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan ikke lave køreplan for transportmiddel... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Transportmidler kan kun vente ved stationer. STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dette transportmiddel stopper ikke ved denne station. +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... tidsplanen er ufuldstændig # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... for mange skilte @@ -5578,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index f3e52f3cb9..a6f6c3f140 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -930,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopieer # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spelopties + +STR_GAME_OPTIONS_TAB_GENERAL :Algemeen +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Algemene instellingen kiezen +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafische elementen +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Grafische instellingen kiezen +STR_GAME_OPTIONS_TAB_SOUND :Geluid +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Geluids- en muziekinstellingen kiezen + +STR_GAME_OPTIONS_VOLUME :Volume +STR_GAME_OPTIONS_SFX_VOLUME :Geluidseffecten +STR_GAME_OPTIONS_MUSIC_VOLUME :Muziek + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuta kiezen @@ -3809,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Stuur in STR_VEHICLE_LIST_REPLACE_VEHICLES :Vervang voertuigen STR_VEHICLE_LIST_SEND_FOR_SERVICING :Stuur voor onderhoud STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Winst dit jaar: {CURRENCY_LONG} (vorig jaar: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Stuur naar depot STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Stuur naar garage @@ -5588,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/english.txt b/src/lang/english.txt index 8f813a4b0c..39f58b6ac1 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1170,6 +1170,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expand a STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Collapse all STR_CONFIG_SETTING_RESET_ALL :{BLACK}Reset all values STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no explanation available) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING1}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Default value: {ORANGE}{STRING1} STR_CONFIG_SETTING_TYPE :{LTBLUE}Setting type: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Client setting (not stored in saves; affects all games) @@ -3827,8 +3828,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send ins STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Servicing STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING1} {STRING1} +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING1} {STRING1} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot @@ -5590,11 +5591,13 @@ STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} STR_JUST_CARGO :{CARGO_LONG} +STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT} STR_JUST_CURRENCY_LONG :{CURRENCY_LONG} STR_JUST_CARGO_LIST :{CARGO_LIST} +STR_JUST_DECIMAL :{DECIMAL} STR_JUST_INT :{NUM} STR_JUST_DATE_TINY :{DATE_TINY} STR_JUST_DATE_SHORT :{DATE_SHORT} @@ -5606,33 +5609,8 @@ STR_JUST_RAW_STRING :{RAW_STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{RAW_STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{RAW_STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING1}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING1}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index dd147d2ab0..f06d0c8020 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -930,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Paste th # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Game Options + +STR_GAME_OPTIONS_TAB_GENERAL :General +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Choose general settings +STR_GAME_OPTIONS_TAB_GRAPHICS :Graphics +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Choose graphics settings +STR_GAME_OPTIONS_TAB_SOUND :Sound +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Choose sound and music settings + +STR_GAME_OPTIONS_VOLUME :Volume +STR_GAME_OPTIONS_SFX_VOLUME :Sound effects +STR_GAME_OPTIONS_MUSIC_VOLUME :Music + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection @@ -3809,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send ins STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Servicing STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot @@ -5588,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 48123801dd..b738947df7 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -930,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copy the # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Game Options + +STR_GAME_OPTIONS_TAB_GENERAL :General +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Choose general settings +STR_GAME_OPTIONS_TAB_GRAPHICS :Graphics +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Choose graphics settings +STR_GAME_OPTIONS_TAB_SOUND :Sound +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Choose sound and music settings + +STR_GAME_OPTIONS_VOLUME :Volume +STR_GAME_OPTIONS_SFX_VOLUME :Sound effects +STR_GAME_OPTIONS_MUSIC_VOLUME :Music + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection @@ -3809,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send ins STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Maintenance STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot @@ -5588,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 5a284c49f5..5dc9b38a42 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -872,6 +872,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Gluu la # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Ludaj Opcioj + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Monunuoj STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elekto de monunuoj @@ -4443,33 +4447,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 0299e28714..bb88f693f3 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -986,6 +986,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Vaateala # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Liidese seadistus + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuuta valimine @@ -3853,8 +3857,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Saada ju STR_VEHICLE_LIST_REPLACE_VEHICLES :Asenda veovahendeid STR_VEHICLE_LIST_SEND_FOR_SERVICING :Saada hooldusesse STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Selle aasta kasum: {CURRENCY_LONG} (eelneval: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Saada depoose STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Saada depoose @@ -5618,33 +5620,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index d2781fa089..528e404fbc 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -1808,7 +1808,6 @@ STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_IMPLICIT :{GRAY}IM STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_DEPOT :{RED}DE STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_OVERFLOW :{RED}{NUM}x -STR_JUST_DECIMAL :{DECIMAL} STR_JUST_DECIMAL1 :{DECIMAL1} STR_JUST_DATE_WALLCLOCK_TINY :{DATE_WALLCLOCK_TINY} diff --git a/src/lang/extra/galician.txt b/src/lang/extra/galician.txt index d98a8c4ce9..01fac7cfeb 100644 --- a/src/lang/extra/galician.txt +++ b/src/lang/extra/galician.txt @@ -1769,7 +1769,6 @@ STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_IMPLICIT :{GRAY}IM STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_DEPOT :{RED}DE STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_OVERFLOW :{RED}{NUM}x -STR_JUST_DECIMAL :{DECIMAL} STR_JUST_DECIMAL1 :{DECIMAL1} STR_JUST_DATE_WALLCLOCK_TINY :{DATE_WALLCLOCK_TINY} diff --git a/src/lang/extra/german.txt b/src/lang/extra/german.txt index 0dc0c1306a..4a4f87006f 100644 --- a/src/lang/extra/german.txt +++ b/src/lang/extra/german.txt @@ -1634,7 +1634,6 @@ STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_IMPLICIT :{GRAY}IM STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_DEPOT :{RED}DE STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_OVERFLOW :{RED}{NUM}x -STR_JUST_DECIMAL :{DECIMAL} STR_JUST_DECIMAL1 :{DECIMAL1} STR_JUST_DATE_WALLCLOCK_TINY :{DATE_WALLCLOCK_TINY} diff --git a/src/lang/extra/korean.txt b/src/lang/extra/korean.txt index e8e5436d8b..68b0c558c7 100644 --- a/src/lang/extra/korean.txt +++ b/src/lang/extra/korean.txt @@ -1770,7 +1770,6 @@ STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_IMPLICIT :{GRAY}암 STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_DEPOT :{RED}기 STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_OVERFLOW :{RED}{NUM}x -STR_JUST_DECIMAL :{DECIMAL} STR_JUST_DECIMAL1 :{DECIMAL1} STR_JUST_DATE_WALLCLOCK_TINY :{DATE_WALLCLOCK_TINY} diff --git a/src/lang/extra/simplified_chinese.txt b/src/lang/extra/simplified_chinese.txt index bb61999a46..e2545ff8bd 100644 --- a/src/lang/extra/simplified_chinese.txt +++ b/src/lang/extra/simplified_chinese.txt @@ -1719,7 +1719,6 @@ STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_IMPLICIT :{GRAY}转 STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_DEPOT :{RED}库 STR_VIEWPORT_SHOW_VEHICLE_ROUTE_STEP_OVERFLOW :{RED}{NUM}x -STR_JUST_DECIMAL :{DECIMAL} STR_JUST_DECIMAL1 :{DECIMAL1} STR_JUST_DATE_WALLCLOCK_TINY :{DATE_WALLCLOCK_TINY} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 726d8d812f..1568dce43c 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -857,6 +857,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Set sta # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spæli møguleikar + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Gjaldsoyra eindir STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Úrval av gjaldsoyra eindum @@ -4584,33 +4588,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ef553f9e4b..dbcc5429b4 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -930,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Siirrä # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Pelin valinnat + +STR_GAME_OPTIONS_TAB_GENERAL :Yleiset +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Valitse yleisasetukset +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafiikka +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Valitse grafiikka-asetukset +STR_GAME_OPTIONS_TAB_SOUND :Ääni +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Valitse ääni- ja musiikkiasetukset + +STR_GAME_OPTIONS_VOLUME :Äänenvoimakkuus +STR_GAME_OPTIONS_SFX_VOLUME :Äänitehosteet +STR_GAME_OPTIONS_MUSIC_VOLUME :Musiikki + +STR_GAME_OPTIONS_VOLUME_0 :0{NBSP}% +STR_GAME_OPTIONS_VOLUME_25 :25{NBSP}% +STR_GAME_OPTIONS_VOLUME_50 :50{NBSP}% +STR_GAME_OPTIONS_VOLUME_75 :75{NBSP}% +STR_GAME_OPTIONS_VOLUME_100 :100{NBSP}% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Rahayksikkö STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta @@ -3809,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa ka STR_VEHICLE_LIST_REPLACE_VEHICLES :Korvaa kulkuneuvoja STR_VEHICLE_LIST_SEND_FOR_SERVICING :Lähetä huoltoon STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Tuotto tänä vuonna: {CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Lähetä varikolle STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Lähetä varikolle @@ -5588,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/french.txt b/src/lang/french.txt index 57ac5edec8..06ff368962 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -931,6 +931,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copier l # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Options du jeu + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Devise STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Sélectionner l'unité monétaire @@ -3806,8 +3810,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envoyer STR_VEHICLE_LIST_REPLACE_VEHICLES :Remplacer des véhicules STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envoyer à l'entretien STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit cette année{NBSP}: {CURRENCY_LONG} (année précédente{NBSP}: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Envoyer au dépôt STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Envoyer au dépôt @@ -5584,33 +5586,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 23706d2e54..44cbdeb333 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -894,6 +894,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Plak de # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spulopsjes + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Muntienheid STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Muntienheidseleksje @@ -4779,33 +4783,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 963c69ad08..36e4968fe6 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1090,6 +1090,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Cuir let # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Roghainnean a' gheama + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Aonadan airgeadra STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Tagh aonadan airgeadra @@ -5501,34 +5505,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_DATE_LONG_SMALL.dat :{TINY_FONT}{BLACK}{DATE_LONG.dat} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 5c7a5f0a1e..237271e217 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -931,6 +931,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copia a # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opcións da partida + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetarias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selección de unidades monetarias @@ -3806,8 +3810,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia-la STR_VEHICLE_LIST_REPLACE_VEHICLES :Reemprazar vehículos STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para servizo STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Beneficio este ano: {CURRENCY_LONG} (ano pasado: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar ao depósito STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar ao depósito @@ -5585,33 +5587,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/german.txt b/src/lang/german.txt index e6d0071880..eeae660b27 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -930,6 +930,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Hauptans # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spieleinstellungen + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Währung STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währung auswählen @@ -3799,8 +3803,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Aufträg STR_VEHICLE_LIST_REPLACE_VEHICLES :Fahrzeuge ersetzen STR_VEHICLE_LIST_SEND_FOR_SERVICING :Zur Wartung schicken STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Gewinn im laufenden Jahr: {CURRENCY_LONG} (vergangenes Jahr: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Ins Depot schicken STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Ins Depot schicken @@ -5576,33 +5578,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/greek.txt b/src/lang/greek.txt index b72104fbf4..ccea7e6e2f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1035,6 +1035,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Επικ # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Επιλογές Παιχνιδιού + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Νομισματικές μονάδες STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Επιλογή νομισματικών μονάδων @@ -3894,8 +3898,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Στεί STR_VEHICLE_LIST_REPLACE_VEHICLES :Αντικατάσταση οχημάτων STR_VEHICLE_LIST_SEND_FOR_SERVICING :Στείλτε για Επισκευή STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Κέρδος αυτό το έτος: {CURRENCY_LONG} (προηγούμενο έτος: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Στείλτε στο Υπόστεγο STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Στείλτε στο Αμαξοστάσιο @@ -5666,33 +5668,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 59f8c1622d..781500d23c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -906,6 +906,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}העתק # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}אפשרויות משחק + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}מטבע STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}בחירת מטבע @@ -3539,7 +3543,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}שלח STR_VEHICLE_LIST_REPLACE_VEHICLES :החלף כלי רכב STR_VEHICLE_LIST_SEND_FOR_SERVICING :שלח לטיפול STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}{1:CURRENCY_LONG} :בשנה שעברה{NBSP} {0:CURRENCY_LONG}) :רווח השנה -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :שלח רכבת למוסך STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :שלח כלי רכב למוסך @@ -5258,33 +5261,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 0643f16469..b01c519b19 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -270,6 +270,10 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC # Game options window + + + + ###length 42 STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM) STR_GAME_OPTIONS_CURRENCY_ISK :आइसलैंडिक क्रोना (ISK) @@ -1511,33 +1515,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_TRAIN :{BLACK}{TRAIN} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 79b9903483..55b306d289 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -993,6 +993,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}A látk # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Alapbeállítások + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Pénznem STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}A használt pénznem kiválasztása @@ -3852,8 +3856,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}A listá STR_VEHICLE_LIST_REPLACE_VEHICLES :Járművek lecserélése STR_VEHICLE_LIST_SEND_FOR_SERVICING :Javításra küld STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Idei nyereség: {CURRENCY_LONG} (Tavalyi: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Elküldi járműtelepre STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Elküldi garázsba @@ -5655,33 +5657,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index ab74e48c2a..4b13e27113 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -856,6 +856,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Afrita s # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Stillingar + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Gjaldmiðill STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Val á gjaldmiðli @@ -4827,33 +4831,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/ido.txt b/src/lang/ido.txt index e3aecc8545..aa1579105f 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -471,6 +471,10 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Ludo Selekti + + + + ###length 42 @@ -1691,33 +1695,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 00b0db5c74..5430c15b18 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -929,6 +929,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Perlihat # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opsi permainan + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mata uang STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Pilih mata uang @@ -3788,8 +3792,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Kirim pe STR_VEHICLE_LIST_REPLACE_VEHICLES :Ganti kendaraan STR_VEHICLE_LIST_SEND_FOR_SERVICING :Perintahkan untuk diperbaiki STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Laba tahun ini: {CURRENCY_LONG} (tahun lalu: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Perintahkan ke bengkel STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Perintahkan ke Bengkel @@ -5550,33 +5552,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 36ea90ecad..c96d59f467 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -918,6 +918,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Gramaigh # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Roghanna Cluiche + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Aonaid airgeadra STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Aonaid airgeadra a roghnú @@ -5459,33 +5463,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/italian.txt b/src/lang/italian.txt index be4f6f1f17..7615cb3bfe 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -932,6 +932,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copia la # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opzioni di gioco + +STR_GAME_OPTIONS_TAB_GENERAL :Generale +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Scegliere le impostazioni generali +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafica +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Scegliere le impostazioni grafiche +STR_GAME_OPTIONS_TAB_SOUND :Suono +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Scegliere le impostazioni audio e musicali + +STR_GAME_OPTIONS_VOLUME :Volume +STR_GAME_OPTIONS_SFX_VOLUME :Effetti sonori +STR_GAME_OPTIONS_MUSIC_VOLUME :Musica + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selezione della valuta @@ -3850,8 +3868,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Invia is STR_VEHICLE_LIST_REPLACE_VEHICLES :Rimpiazza veicoli STR_VEHICLE_LIST_SEND_FOR_SERVICING :Manutenzione STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profitto quest'anno: {CURRENCY_LONG} (anno scorso: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Manda al deposito STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Manda al deposito @@ -5629,33 +5645,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index a7f04e7f0a..56772ea119 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -195,6 +195,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{COMMA}mph STR_UNITS_VELOCITY_METRIC :{COMMA}km/h STR_UNITS_VELOCITY_SI :{COMMA}m/s STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}タイル/日 +STR_UNITS_VELOCITY_KNOTS :{COMMA}{NBSP}ノット STR_UNITS_POWER_IMPERIAL :{COMMA}英馬力 STR_UNITS_POWER_METRIC :{COMMA}仏馬力 @@ -343,9 +344,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}指令 ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}ゲームをポーズします STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}ゲーム進行速度を早くします -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}ゲームオプションの設定画面を開きます -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}ゲームのセーブ、中断、OpenTTDの終了ができます -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}地図の表示、ビューポートの表示、標識のリストの表示ができます +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}ゲームオプションと設定 +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}ゲームのセーブ、ロード、中断、OpenTTDの終了ができます +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}地図の表示、ビューポートの表示、貨物流通、標識のリストの表示ができます STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}街の一覧を表示します STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}助成金一覧を表示します STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}社有の停留施設の一覧を表示します @@ -353,9 +354,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}会社 STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}会社の一般的な情報を表示します STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}ゲームの背景となる物語を表示します STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}ゲームの目標一覧を表示します -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}さまざまなグラフを表示します +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}会社の業績グラフや運送報酬相場を表示します STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}会社の業務成績表を表示します -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}新たな産業の開設に出資します +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}産業を調査、及び産業の開設に出資します STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}社有の列車一覧とそのグループを表示します。Ctrl+クリックで一覧のみ表示します STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}社有の車両一覧とそのグループを表示します。Ctrl+クリックで一覧のみ表示します STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}社有の船舶一覧とそのグループを表示します。Ctrl+クリックで一覧のみ表示します @@ -369,8 +370,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}埠頭 STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}空港を建設します STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}地形のツールバーを開きます。整地や植林などを行うことができます。 STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}音楽/効果音のウィンドウを表示します -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}最後のメッセージ/ニュースの表示と、メッセージオプションの設定ができます -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}地域の情報、コンソール、スクリプトのデバッグ、スクリーンショット、OpenTTDについて、などのツール群です +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}最新メッセージ/ニュースとメッセージ履歴を表示、メッセージをすべて削除 +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}地域の情報、スクリーンショット、OpenTTDについて、開発者ツール STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}ツールバーを切り替えます # Extra tooltips for the scenario editor toolbar @@ -430,7 +431,7 @@ STR_FILE_MENU_EXIT :OpenTTDを終 ###length 4 STR_MAP_MENU_MAP_OF_WORLD :地図 STR_MAP_MENU_EXTRA_VIEWPORT :ビューポートを開く -STR_MAP_MENU_LINGRAPH_LEGEND :貨物輸送履歴 +STR_MAP_MENU_LINGRAPH_LEGEND :貨物流通履歴 STR_MAP_MENU_SIGN_LIST :標識リスト # Town menu @@ -929,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}この # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}ゲーム設定 + +STR_GAME_OPTIONS_TAB_GENERAL :一般 +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}一般設定を開きます +STR_GAME_OPTIONS_TAB_GRAPHICS :グラフィック +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}グラフィック設定を開きます +STR_GAME_OPTIONS_TAB_SOUND :サウンド +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}サウンドと音楽の設定を開きます + +STR_GAME_OPTIONS_VOLUME :音量 +STR_GAME_OPTIONS_SFX_VOLUME :効果音 +STR_GAME_OPTIONS_MUSIC_VOLUME :音楽 + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}通貨単位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}通貨単位の選択 @@ -982,6 +1001,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}自動 # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :しない +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :10分毎 +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :30分毎 +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :60分毎 +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :120分毎 STR_GAME_OPTIONS_LANGUAGE :{BLACK}言語 STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}ゲームの言語を選択します @@ -1707,7 +1730,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :一つのスク STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :最大信頼度を点検要件化: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :次の点検が必要と判断される条件を設定します。無効の場合は、前の点検から指定の期間が経過した際に点検が必要と判断されます。有効にすると、輸送機器の最大信頼度が指定の値より落ち込んだ場合に次の点検が必要と判断されます +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :有効にすると、輸送機器の信頼度が最大信頼度より指定の差分落ち込んだ場合に点検に行きます。{}{}例えば、輸送機器の最大信頼度が90%で点検間隔が20%だとすると、輸送機器の信頼度が72%を下回る場合に点検に行きます。 STR_CONFIG_SETTING_SERVINT_TRAINS :列車の点検周期: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :個別に指定されていない場合の、列車の点検周期を設定します @@ -1912,6 +1935,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :変化なし STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :初期の都市サイズ乗数: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :ゲーム開始時に都市が普通の街に比べて平均して何倍の人口規模になるかを設定します +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :行先分配グラフを{STRING}秒毎に更新 +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :行先分配グラフの更新の間の待ち時間。各更新はグラフの一部だけのルートを再計算します。即ち、この設定を〇〇秒に指定する場合、全グラフが〇〇秒毎に更新されるのではありません。間隔が短ければ短いほどCPU時間を消費します。長ければ長いほど貨物流通の新規ルートの行先分配に時間がかかります。 +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :行先分配の更新に{STRING}秒を割り当て +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :行先分配グラフの更新に割り当てられる時間。更新が始まると、スレッドが生成されて、指定の時間に実行させられます。短ければ短いほど間に合わない可能性が高まります。その場合、ゲームは停止して計算完了を待ちます。長ければ長いほどルート変更の際に行先分配の更新に時間がかかります。 STR_CONFIG_SETTING_DISTRIBUTION_PAX :旅客の行先分配法: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :旅客がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう乗客とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう旅客数は独立に決められます。「無効」では行き先別分配をしなくなります。 @@ -1937,13 +1964,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :この値を100 STR_CONFIG_SETTING_SHORT_PATH_SATURATION :高収容力経路より速達経路を優先飽和: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :二つの停留施設間を結ぶ経路が複数存在することは往々にしてあります。そのような場合、貨物分配アルゴリズムは最初に最短となる経路を飽和するまで使用し、次いで2番目の最短経路を使用するというように埋めていきます。飽和したかどうかは、推定収容力、輸送計画によって判断されます。すべての経路を飽和してもまだ需要を満たせない場合、高容量な経路を優先しつつ、すべての経路に負荷を掛けます。しかしほとんどの場合、アルゴリズムは経路の輸送力を正確に見積もることができません。この設定では、高収容力の路線を使用し始める前にどの程度最短経路を飽和するかを設定します。収容力より需要が上回ると推定される時には、停留施設が混み合うのを避けるために100%未満に設定して下さい。 -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度単位: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度単位(陸地): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :速度単位(海事): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :ゲーム中の速度をいずれの単位系で表すか決定します ###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :ヤード・ポンド法 (マイル時(mph)) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :メートル法 (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国際単位系 (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :ゲーム内単位(タイル/日) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :ノット STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :動力単位: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :ゲーム中の動力(仕事率、主に輸送機器の出力表記)をいずれの単位系で表すか決定します @@ -3798,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}この STR_VEHICLE_LIST_REPLACE_VEHICLES :輸送機器更新 STR_VEHICLE_LIST_SEND_FOR_SERVICING :回送して点検 STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}収益(今年): {CURRENCY_LONG} (収益(去年): {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :列車庫へ回送 STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :車庫へ回送 @@ -4564,7 +4591,9 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}このAI STR_AI_CONFIG_HUMAN_PLAYER :人間のプレーヤー STR_AI_CONFIG_RANDOM_AI :ランダムなAI STR_AI_CONFIG_NONE :(なし) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}最大競争会社数: {ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}競争会社の創業間隔: {ORANGE}{COMMA}分 STR_AI_CONFIG_MOVE_UP :{BLACK}上に移動 STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}選択したAIの順位を上げる @@ -4577,7 +4606,7 @@ STR_AI_CONFIG_AI :{SILVER}AI STR_AI_CONFIG_CHANGE_AI :{BLACK}AIを選択 STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}ゲームスクリプトを選択 -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}他のスクリプトをロードします +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}他のスクリプトをロードします。Ctrl+クリックで全ての利用可能バージョンを表示します STR_AI_CONFIG_CONFIGURE :{BLACK}設定 STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}スクリプトのパラメータを設定します @@ -5079,6 +5108,7 @@ STR_ERROR_NO_BUOY :{WHITE}ブイ STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}この輸送機器にダイヤを設定できません STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}輸送機器は停留施設でのみ待機できます STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}この輸送機器はこの停留施設には停まれません +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}…ダイヤが未完成です # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}標識が多すぎます @@ -5574,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 9c0df1b5c2..5161e11f0f 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -931,6 +931,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}외부 # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}게임 기본 설정 + +STR_GAME_OPTIONS_TAB_GENERAL :일반 +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}일반 설정을 선택합니다 +STR_GAME_OPTIONS_TAB_GRAPHICS :그래픽 +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}그래픽 설정을 선택합니다 +STR_GAME_OPTIONS_TAB_SOUND :효과음 +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}효과음과 배경음 설정을 선택합니다 + +STR_GAME_OPTIONS_VOLUME :음량 +STR_GAME_OPTIONS_SFX_VOLUME :효과음 +STR_GAME_OPTIONS_MUSIC_VOLUME :배경음 + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}화폐 단위 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}화폐 단위 선택 @@ -3810,8 +3828,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}이 목 STR_VEHICLE_LIST_REPLACE_VEHICLES :차량 교체 STR_VEHICLE_LIST_SEND_FOR_SERVICING :점검하러 보내기 STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}올해 이익: {CURRENCY_LONG} (작년: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :차량기지로 보내기 STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :차고지로 보내기 @@ -5589,33 +5605,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{G=m}{BLACK}1 STR_BLACK_2 :{G=f}{BLACK}2 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index ad799ca250..66554994b5 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1081,6 +1081,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Transcri # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Ludi optiones + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unitates nummi STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Electio unitatum nummi @@ -5453,33 +5457,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 8f1051824a..b5c54257cd 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -931,6 +931,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopēt # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spēles opcijas + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Naudas vienības STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Naudas vienību izvēle @@ -3804,8 +3808,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Sūtīt STR_VEHICLE_LIST_REPLACE_VEHICLES :Nomainīt transportlīdzekļus STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sūtīt uz apkopi STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Peļņa šogad: {CURRENCY_LONG} (pērn: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sūtīt uz depo STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sūtīt uz depo @@ -5567,33 +5569,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index eadc43a877..f2d5ac4f1f 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1129,6 +1129,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Įkelti # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Pagrindinės nuostatos + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas @@ -3950,7 +3954,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Siųsti STR_VEHICLE_LIST_REPLACE_VEHICLES :Keisti tr. priemones STR_VEHICLE_LIST_SEND_FOR_SERVICING :Siųsti techninės apžiūros STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Šių metų pelnas: {CURRENCY_LONG} (praėjusių metų: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Siųsti į depą STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Siųsti į depą @@ -6024,33 +6027,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 32f3bd201b..e10ac61b21 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -929,6 +929,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Setzt d' # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spill Optiounen + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Währungseenheet STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währungseenheet wielen @@ -3796,8 +3800,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Schéckt STR_VEHICLE_LIST_REPLACE_VEHICLES :Gefierer ersetzen STR_VEHICLE_LIST_SEND_FOR_SERVICING :An d'Revisioun schécken STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit dëst Joer: {CURRENCY_LONG} (lescht Joer: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :An de Schapp schécken STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :An den Depot schécken @@ -5560,33 +5562,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 1b2a4b0dd5..0ab05ad98c 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -790,6 +790,10 @@ STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Опции на Играта + + + + ###length 42 @@ -2234,33 +2238,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 0e39213214..c66ec92406 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -861,6 +861,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Salin lo # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Pilihan Permainan + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unit kewangan STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Pilihan unit kewangan @@ -4735,33 +4739,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index c3afc0c70c..875fb118fe 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -404,6 +404,10 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE # Game options window + + + + ###length 42 @@ -1734,33 +1738,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index f4ce363e64..376237398c 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -697,6 +697,10 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC # Game options window + + + + ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :पौंड (£) STR_GAME_OPTIONS_CURRENCY_USD :डोल्लर ($) @@ -2104,33 +2108,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index e70a645baa..12405d545e 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -922,6 +922,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}flytt pl # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spillinnstillinger + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhet STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Velg valutaenhet som skal brukes @@ -5481,33 +5485,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index b8c185d792..b18b471f4a 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -887,6 +887,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopier s # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spelinnstillingar + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaeining STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Vel valutaeining @@ -4972,33 +4976,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 6e4d28d63d..77c3508342 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -877,6 +877,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}موقع # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}تنظیمات بازی + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}واحد پول STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}انتخب واحد پول @@ -4273,33 +4277,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 520656080e..dc16057939 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1047,7 +1047,7 @@ STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Wielkoś STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Suma przyznanych punktów # Music window -STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jazz Jukebox +STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Szafa Grająca STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLACK}Wszystko STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Stary styl STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Nowy styl @@ -1060,7 +1060,7 @@ STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKG STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Brak dostępnej muzyki -STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" +STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}„{STRING}” STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Ścieżka STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Tytuł STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Losowo @@ -1070,20 +1070,20 @@ STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Przejdź STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Zatrzymaj muzykę STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Odtwarzaj muzykę STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Przesuń suwaki żeby ustawić głośność dźwięków i muzyki -STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Wybierz program 'Wszystko' -STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Wybierz program 'Stary styl' -STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Wybierz program 'Nowy styl' -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Wybierz program 'Ezy Street' -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Wybierz program 'Własny 1' (definiowany) -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Wybierz program 'Własny 2' (definiowany) -STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Losowe odtwarzanie wł./wył. +STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Wybierz program „Wszystko” +STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Wybierz program „Stary styl” +STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Wybierz program „Nowy styl” +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Wybierz program „Ezy Street” +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Wybierz program „Własny 1” (zdefiniowany przez użytkownika) +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Wybierz program „Własny 2” (zdefiniowany przez użytkownika) +STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Włącz/wyłącz losowe odtwarzanie STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Pokaż okno wyboru ścieżek # Playlist window -STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Program muzyczny - '{STRING}' -STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Program muzyczny - „{STRING}” +STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} „{STRING}” STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Wykaz ścieżek -STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programuj - '{STRING}' +STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - „{STRING}” STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Wyczyść STR_PLAYLIST_CHANGE_SET :{BLACK}Zmień zestaw STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Wyczyść obecny program (tylko Wlasny1 lub Wlasny2) @@ -1310,6 +1310,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiuj p # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opcje gry + +STR_GAME_OPTIONS_TAB_GENERAL :Ogólne +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Wybierz opcje ogólne +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafika +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Wybierz opcje grafiki +STR_GAME_OPTIONS_TAB_SOUND :Dźwięk +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Wybierz opcje dźwięku i muzyki + +STR_GAME_OPTIONS_VOLUME :Głośność +STR_GAME_OPTIONS_SFX_VOLUME :Efekty dźwiękowe +STR_GAME_OPTIONS_MUSIC_VOLUME :Muzyka + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Waluta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Wybór waluty @@ -1363,6 +1381,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Częstot # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Wył. +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Co 10 minut +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Co 30 minut +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Co 60 minut +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Co 120 minut STR_GAME_OPTIONS_LANGUAGE :{BLACK}Język STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Wybierz język interfejsu @@ -4185,8 +4207,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Wyślij STR_VEHICLE_LIST_REPLACE_VEHICLES :Zastąp pojazdy STR_VEHICLE_LIST_SEND_FOR_SERVICING :Wyślij do serwisu STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Zysk w tym roku: {CURRENCY_LONG} (ostatni rok: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Wyślij do warsztatów STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Wyślij do zajezdni @@ -6007,33 +6027,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 788e60d54d..279b46dae8 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -931,6 +931,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar a # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo + +STR_GAME_OPTIONS_TAB_GENERAL :Geral +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Escolher definições gerais +STR_GAME_OPTIONS_TAB_GRAPHICS :Gráficos +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Escolher definições gráficas +STR_GAME_OPTIONS_TAB_SOUND :Som +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Escolher definições de sons e música + +STR_GAME_OPTIONS_VOLUME :Volume +STR_GAME_OPTIONS_SFX_VOLUME :Efeitos sonoros +STR_GAME_OPTIONS_MUSIC_VOLUME :Música + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetárias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecção de unidades monetárias @@ -1385,8 +1403,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de infraestruturas: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando ativo, as infraestruturas têm custos de manutenção. O custo cresce mais do que proporcionalmente com o tamanho da rede e com isso afeta mais as companhias maiores comparando com as mais pequenas -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Côr de inicio da empresa: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolher côr de inicio da empresa +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial da empresa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolher a cor inicial da empresa STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ativar esta preferência torna cada tipo de aeroporto disponível para sempre após a sua introdução @@ -3810,8 +3828,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Enviar i STR_VEHICLE_LIST_REPLACE_VEHICLES :Substituir Veículos STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para Serviço STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lucro deste ano: {CURRENCY_LONG} (último ano: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar para Depósito STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar para Depósito @@ -5589,33 +5605,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index af0acccaff..3b4dba8d42 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -929,6 +929,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiază # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opţiuni + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unitate monetară STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Alege unitatea monetară @@ -3797,8 +3801,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Trimite STR_VEHICLE_LIST_REPLACE_VEHICLES :Înlocuiește vehiculele STR_VEHICLE_LIST_SEND_FOR_SERVICING :Trimite in service STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit anul acesta: {CURRENCY_LONG} (anul trecut: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Trimite la depou STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Trimite la depou @@ -5573,33 +5575,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 8254fd0f4f..6ecd782ee4 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1074,7 +1074,25 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}В ос STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Показать в основном окне # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Основные настройки +STR_GAME_OPTIONS_CAPTION :{WHITE}Настройки + +STR_GAME_OPTIONS_TAB_GENERAL :Основные +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Основные настройки игры +STR_GAME_OPTIONS_TAB_GRAPHICS :Графика +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Настройки графики +STR_GAME_OPTIONS_TAB_SOUND :Звук +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Настройки звука и музыки + +STR_GAME_OPTIONS_VOLUME :Громкость +STR_GAME_OPTIONS_SFX_VOLUME :Звуковые эффекты +STR_GAME_OPTIONS_MUSIC_VOLUME :Музыка + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Валюта STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Смена используемой в игре валюты @@ -3984,8 +4002,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Упра STR_VEHICLE_LIST_REPLACE_VEHICLES :Замена транспорта STR_VEHICLE_LIST_SEND_FOR_SERVICING :Отправить на тех. обслуживание STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Прибыль в этом году: {CURRENCY_LONG} (в прошлом году: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Отправить в депо STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Отправить в гараж @@ -5812,33 +5828,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 39565c8ac6..bc20e4454e 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1124,6 +1124,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiraj # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opcije + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbor valute @@ -3983,8 +3987,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Pošalji STR_VEHICLE_LIST_REPLACE_VEHICLES :Obnovi vozila STR_VEHICLE_LIST_SEND_FOR_SERVICING :Pošalji na servis STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Ovogodišnja zarada: {CURRENCY_LONG} (prošle godine: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Pošalji u depo STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Pošalji u depo @@ -5761,33 +5763,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 4aa10b4f22..d550ddeb9d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -929,6 +929,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}将主 # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}游戏选项 + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}货币单位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}货币单位选择 @@ -3796,8 +3800,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向所 STR_VEHICLE_LIST_REPLACE_VEHICLES :替换车辆/飞机/船只 STR_VEHICLE_LIST_SEND_FOR_SERVICING :进行保养 STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}今年利润:{CURRENCY_LONG} (去年利润:{CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :前往列车车库 STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :前往汽车车库 @@ -5570,33 +5572,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 03b4125aa9..bea3ff1063 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -998,6 +998,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Nastavi # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Možnosti hry + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mena STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výber menovej jednotky @@ -3869,8 +3873,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Zadať p STR_VEHICLE_LIST_REPLACE_VEHICLES :Vymeniť vozidlá STR_VEHICLE_LIST_SEND_FOR_SERVICING :Vykonať servis STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Zisk tento rok: {CURRENCY_LONG} (minulý rok: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Poslať do depa STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslať do garáže @@ -5647,33 +5649,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 9a9e1954fa..2ea7c48a7d 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1041,6 +1041,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Prilepi # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Možnosti Igre + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valute STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Izbira valut @@ -5272,33 +5276,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index e8f04ac022..a40b0552c7 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -930,6 +930,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copia la # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opciones del juego + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidad monetaria STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecciona la nnidad monetaria @@ -3795,8 +3799,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in STR_VEHICLE_LIST_REPLACE_VEHICLES :Reemplazar vehículos STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para Mantenimiento STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Beneficio este año: {CURRENCY_LONG} (año anterior: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar a Depósito STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar a Depósito @@ -5557,33 +5559,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index ecc22dc1dd..b01cb43e4a 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -930,6 +930,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar u # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opciones de juego + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Divisa STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Elegir divisa @@ -3796,8 +3800,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Enviar i STR_VEHICLE_LIST_REPLACE_VEHICLES :Reemplazar vehículos STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar a mantenimiento STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Ganancias este año: {CURRENCY_LONG} (último año: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar a depósito STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar a depósito @@ -5560,33 +5562,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 1ad90a5727..1f3b4b0fa5 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -929,6 +929,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiera # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spelinställningar + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenheter STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Välj valutaenhet @@ -3798,8 +3802,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Skicka i STR_VEHICLE_LIST_REPLACE_VEHICLES :Byt ut fordon STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka på service STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Vinst detta år: {CURRENCY_LONG} (förra året: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Skicka till depå STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Skicka till depå @@ -5574,33 +5576,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 899cdb826d..bc4655a735 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -889,6 +889,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}பி # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}ஆட்டத்தின் அமைப்புகள் + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}நாணய பிரிவுகள் STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}நாணய பிரிவு தேர்ந்தெடுத்தல் @@ -5050,33 +5054,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 3082cdc9db..d960cd76a8 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -900,6 +900,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}วา # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}ตัวเลือกเกม + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}หน่วยสกุลเงิน STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}การเลือกสกุลเงิน @@ -5186,33 +5190,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE} {CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 747f5c6ff0..e95e67d371 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -929,6 +929,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}將主 # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}遊戲選項 + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}幣值單位 STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}選擇幣值單位 @@ -3798,8 +3802,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向清 STR_VEHICLE_LIST_REPLACE_VEHICLES :替換車輛 STR_VEHICLE_LIST_SEND_FOR_SERVICING :送去維護 STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}今年盈利:{CURRENCY_LONG} (去年盈利:{CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :送到機廠 STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :送到車廠 @@ -5574,33 +5576,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index dd1c56f04b..22cbcd71e6 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -931,6 +931,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bu gör # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Seçenekler + +STR_GAME_OPTIONS_TAB_GENERAL :Genel +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Genel ayarları seçin +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafikler +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Grafik ayarlarını seçin +STR_GAME_OPTIONS_TAB_SOUND :Ses +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Ses ve müzik ayarlarını seçin + +STR_GAME_OPTIONS_VOLUME :Ses seviyesi +STR_GAME_OPTIONS_SFX_VOLUME :Ses efektleri +STR_GAME_OPTIONS_MUSIC_VOLUME :Müzik + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Para birimleri STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Para birimi seçimi @@ -3810,8 +3828,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Listedek STR_VEHICLE_LIST_REPLACE_VEHICLES :Araçları Değiştir STR_VEHICLE_LIST_SEND_FOR_SERVICING :Bakıma Gönder STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Bu seneki kar: {CURRENCY_LONG} (geçen sene: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Garaja Gönder STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Garaja Gönder @@ -5599,33 +5615,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 06d65ecea9..d0dfe09e2b 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1057,6 +1057,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Пере # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Налаштування гри + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Грошова одиниця STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Виберіть грошову одиницю @@ -3919,8 +3923,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Дати STR_VEHICLE_LIST_REPLACE_VEHICLES :Оновлення STR_VEHICLE_LIST_SEND_FOR_SERVICING :Відправити на техогляд STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Прибуток цього року: {CURRENCY_LONG} (торік: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Відправити до депо STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Відправити в гараж @@ -5720,33 +5722,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 7e0c993ea4..47a96f74b9 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -854,6 +854,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}دیکھ # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}کھیل کے اختیارات + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}کرنسی کی اکائیاں STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}کرنسی کی اکائی اختیار کریں @@ -3170,33 +3174,8 @@ STR_JUST_STRING_STRING :{STRING}{STRING STR_JUST_RAW_STRING :{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}۱ STR_BLACK_2 :{BLACK}۲ diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index ad22d47759..aba4254d97 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -930,6 +930,24 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Sao ché # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Cấu Hình Trò Chơi + +STR_GAME_OPTIONS_TAB_GENERAL :Tổng quát +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Điều chỉnh thiết lập tổng quát +STR_GAME_OPTIONS_TAB_GRAPHICS :Đồ họa +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Điều chỉnh thiết lập đồ họa +STR_GAME_OPTIONS_TAB_SOUND :Âm thanh +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Lựa chọn thiết lập cho âm thanh và nhạc + +STR_GAME_OPTIONS_VOLUME :Âm lượng +STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh +STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc + +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Đơn vị tiền tệ STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Lựa chọn đơn vị tiền tệ @@ -3809,8 +3827,6 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Gửi ch STR_VEHICLE_LIST_REPLACE_VEHICLES :Thay phương tiện STR_VEHICLE_LIST_SEND_FOR_SERVICING :Gửi về bảo trì STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lợi nhuận năm nay: {CURRENCY_LONG} (năm ngoái: {CURRENCY_LONG}) -STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] -STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Gửi về xưởng STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Gửi về xưởng @@ -5588,33 +5604,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 1404de439f..99838f5e96 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -887,6 +887,10 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Gludo ll # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Dewisiadau Gêm + + + + STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Uned Arian STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Dewis unedau arian @@ -5095,33 +5099,8 @@ STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} # Slightly 'raw' stringcodes with colour or size -STR_BLACK_COMMA :{BLACK}{COMMA} -STR_TINY_BLACK_COMMA :{TINY_FONT}{BLACK}{COMMA} -STR_TINY_COMMA :{TINY_FONT}{COMMA} -STR_BLUE_COMMA :{BLUE}{COMMA} -STR_RED_COMMA :{RED}{COMMA} -STR_WHITE_COMMA :{WHITE}{COMMA} -STR_TINY_BLACK_DECIMAL :{TINY_FONT}{BLACK}{DECIMAL} -STR_COMPANY_MONEY :{WHITE}{CURRENCY_LONG} -STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG} -STR_WHITE_DATE_LONG :{WHITE}{DATE_LONG} -STR_SHORT_DATE :{WHITE}{DATE_TINY} -STR_DATE_LONG_SMALL :{TINY_FONT}{BLACK}{DATE_LONG} -STR_TINY_GROUP :{TINY_FONT}{GROUP} -STR_BLACK_INT :{BLACK}{NUM} -STR_ORANGE_INT :{ORANGE}{NUM} STR_WHITE_SIGN :{WHITE}{SIGN} -STR_TINY_BLACK_STATION :{TINY_FONT}{BLACK}{STATION} -STR_BLACK_STRING :{BLACK}{STRING} -STR_BLACK_RAW_STRING :{BLACK}{STRING} -STR_ORANGE_STRING :{ORANGE}{STRING} -STR_LTBLUE_STRING :{LTBLUE}{STRING} -STR_WHITE_STRING :{WHITE}{STRING} -STR_ORANGE_STRING1_WHITE :{ORANGE}{STRING}{WHITE} -STR_ORANGE_STRING1_LTBLUE :{ORANGE}{STRING}{LTBLUE} STR_TINY_BLACK_HEIGHT :{TINY_FONT}{BLACK}{HEIGHT} -STR_TINY_BLACK_VEHICLE :{TINY_FONT}{BLACK}{VEHICLE} -STR_TINY_RIGHT_ARROW :{TINY_FONT}{RIGHT_ARROW} STR_BLACK_1 :{BLACK}1 STR_BLACK_2 :{BLACK}2 diff --git a/src/league_gui.cpp b/src/league_gui.cpp index a46cd2efa6..ec1e828178 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -421,7 +421,7 @@ public: static const NWidgetPart _nested_script_league_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), - NWidget(WWT_CAPTION, COLOUR_BROWN, WID_SLT_CAPTION), SetDataTip(STR_BLACK_RAW_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_BROWN, WID_SLT_CAPTION), SetDataTip(STR_JUST_RAW_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), EndContainer(), diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 99535fd468..c3329c3c7b 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -825,9 +825,7 @@ bool LinkGraphLegendWindow::OnTooltip(Point pt, int widget, TooltipCloseConditio if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { if (this->IsWidgetDisabled(widget)) return false; CargoSpec *cargo = CargoSpec::Get(widget - WID_LGL_CARGO_FIRST); - uint64 params[1]; - params[0] = cargo->name; - GuiShowTooltips(this, STR_BLACK_STRING, 1, params, close_cond); + GuiShowTooltips(this, cargo->name, 0, nullptr, close_cond); return true; } return false; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index d734fc1538..09a833ee6f 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -423,9 +423,9 @@ static const NWidgetPart _nested_about_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetPadding(0, 5, 1, 5), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_A_SCROLLING_TEXT), EndContainer(), - NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE), SetDataTip(STR_BLACK_RAW_STRING, STR_NULL), - NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE1), SetDataTip(STR_BLACK_RAW_STRING, STR_NULL), - NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE2), SetDataTip(STR_BLACK_RAW_STRING, STR_NULL), + NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE), SetDataTip(STR_JUST_RAW_STRING, STR_NULL), + NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE1), SetDataTip(STR_JUST_RAW_STRING, STR_NULL), + NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE2), SetDataTip(STR_JUST_RAW_STRING, STR_NULL), NWidget(WWT_LABEL, COLOUR_GREY, WID_A_COPYRIGHT), SetDataTip(STR_ABOUT_COPYRIGHT_OPENTTD, STR_NULL), EndContainer(), }; @@ -786,12 +786,12 @@ struct TooltipsWindow : public Window GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), PC_LIGHT_YELLOW); if (this->paramcount == 0) { - DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.fullbevel), this->buffer, TC_FROMSTRING, SA_CENTER); + DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.fullbevel), this->buffer, TC_BLACK, SA_CENTER); } else { for (uint arg = 0; arg < this->paramcount; arg++) { SetDParam(arg, this->params[arg]); } - DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.fullbevel), this->string_id, TC_FROMSTRING, SA_CENTER); + DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.fullbevel), this->string_id, TC_BLACK, SA_CENTER); } } @@ -1156,7 +1156,7 @@ struct QueryStringWindow : public Window static const NWidgetPart _nested_query_string_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_QS_CAPTION), SetDataTip(STR_WHITE_STRING, STR_NULL), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_QS_CAPTION), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QS_TEXT), SetMinimalSize(256, 12), SetFill(1, 1), SetPadding(2, 2, 2, 2), diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index 065e923548..1e8b49980b 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -71,7 +71,7 @@ const char *ContentInfo::GetTextfile(TextfileType type) const break; case CONTENT_TYPE_NEWGRF: { const GRFConfig *gc = FindGRFConfig(BSWAP32(this->unique_id), FGCM_EXACT, this->md5sum); - tmp = gc != nullptr ? gc->filename : nullptr; + tmp = gc != nullptr ? gc->filename.c_str() : nullptr; break; } case CONTENT_TYPE_BASE_GRAPHICS: diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 0646d70290..1abd023795 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1247,7 +1247,7 @@ static const NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_VISIBILITY_LABEL, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), NWidget(NWID_SPACER), SetFill(1, 1), @@ -1329,7 +1329,7 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), @@ -1337,17 +1337,17 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_BLACK_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), EndContainer(), EndContainer(), EndContainer(), @@ -1356,7 +1356,7 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), EndContainer(), EndContainer(), diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 746781b151..6ea8a1cc37 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -335,10 +335,10 @@ GRFFile *GetFileByGRFIDExpectCurrent(uint32 grfid) * @param filename The filename to obtain the file for. * @return The file. */ -static GRFFile *GetFileByFilename(const char *filename) +static GRFFile *GetFileByFilename(const std::string &filename) { for (GRFFile * const file : _grf_files) { - if (strcmp(file->filename, filename) == 0) return file; + if (file->filename == filename) return file; } return nullptr; } @@ -370,12 +370,11 @@ static GRFError *DisableGrf(StringID message = STR_NULL, GRFConfig *config = nul if (config == _cur.grfconfig) _cur.skip_sprites = -1; if (message != STR_NULL) { - delete config->error; - config->error = new GRFError(STR_NEWGRF_ERROR_MSG_FATAL, message); + config->error = std::make_unique(STR_NEWGRF_ERROR_MSG_FATAL, message); if (config == _cur.grfconfig) config->error->param_value[0] = _cur.nfo_line; } - return config->error; + return config->error.get(); } /** @@ -8034,8 +8033,7 @@ static void GRFLoadError(ByteReader *buf) DisableGrf(); /* Make sure we show fatal errors, instead of silly infos from before */ - delete _cur.grfconfig->error; - _cur.grfconfig->error = nullptr; + _cur.grfconfig->error.reset(); } if (message_id >= lengthof(msgstr) && message_id != 0xFF) { @@ -8051,7 +8049,8 @@ static void GRFLoadError(ByteReader *buf) /* For now we can only show one message per newgrf file. */ if (_cur.grfconfig->error != nullptr) return; - GRFError *error = new GRFError(sevstr[severity]); + _cur.grfconfig->error = std::make_unique(sevstr[severity]); + GRFError *error = _cur.grfconfig->error.get(); if (message_id == 0xFF) { /* This is a custom error message. */ @@ -8081,8 +8080,6 @@ static void GRFLoadError(ByteReader *buf) uint param_number = buf->ReadByte(); error->param_value[i] = _cur.grffile->GetParam(param_number); } - - _cur.grfconfig->error = error; } /* Action 0x0C */ @@ -10353,10 +10350,7 @@ static void ResetNewGRF() static void ResetNewGRFErrors() { for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { - if (!HasBit(c->flags, GCF_COPY) && c->error != nullptr) { - delete c->error; - c->error = nullptr; - } + c->error.reset(); } } @@ -10522,7 +10516,7 @@ static void InitNewGRFFile(const GRFConfig *config) */ GRFFile::GRFFile(const GRFConfig *config) { - this->filename = stredup(config->filename); + this->filename = config->filename; this->grfid = config->ident.grfid; /* Initialise local settings to defaults */ @@ -10571,7 +10565,6 @@ GRFFile::GRFFile(const GRFConfig *config) GRFFile::~GRFFile() { - free(this->filename); delete[] this->language_map; } @@ -10835,7 +10828,7 @@ static void FinaliseCargoArray() * @param filename The filename of the newgrf this house was defined in. * @return Whether the given housespec is valid. */ -static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseSpec *next2, const HouseSpec *next3, const char *filename) +static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseSpec *next2, const HouseSpec *next3, const std::string &filename) { if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 && (next1 == nullptr || !next1->enabled || (next1->building_flags & BUILDING_HAS_1_TILE) != 0)) || @@ -10843,7 +10836,7 @@ static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseS (next2 == nullptr || !next2->enabled || (next2->building_flags & BUILDING_HAS_1_TILE) != 0 || next3 == nullptr || !next3->enabled || (next3->building_flags & BUILDING_HAS_1_TILE) != 0))) { hs->enabled = false; - if (filename != nullptr) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d as multitile, but no suitable tiles follow. Disabling house.", filename, hs->grf_prop.local_id); + if (!filename.empty()) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d as multitile, but no suitable tiles follow. Disabling house.", filename.c_str(), hs->grf_prop.local_id); return false; } @@ -10853,22 +10846,22 @@ static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseS if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 && next1->population != 0) || ((hs->building_flags & BUILDING_HAS_4_TILES) != 0 && (next2->population != 0 || next3->population != 0))) { hs->enabled = false; - if (filename != nullptr) DEBUG(grf, 1, "FinaliseHouseArray: %s defines multitile house %d with non-zero population on additional tiles. Disabling house.", filename, hs->grf_prop.local_id); + if (!filename.empty()) DEBUG(grf, 1, "FinaliseHouseArray: %s defines multitile house %d with non-zero population on additional tiles. Disabling house.", filename.c_str(), hs->grf_prop.local_id); return false; } /* Substitute type is also used for override, and having an override with a different size causes crashes. * This check should only be done for NewGRF houses because grf_prop.subst_id is not set for original houses.*/ - if (filename != nullptr && (hs->building_flags & BUILDING_HAS_1_TILE) != (HouseSpec::Get(hs->grf_prop.subst_id)->building_flags & BUILDING_HAS_1_TILE)) { + if (!filename.empty() && (hs->building_flags & BUILDING_HAS_1_TILE) != (HouseSpec::Get(hs->grf_prop.subst_id)->building_flags & BUILDING_HAS_1_TILE)) { hs->enabled = false; - DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d with different house size then it's substitute type. Disabling house.", filename, hs->grf_prop.local_id); + DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d with different house size then it's substitute type. Disabling house.", filename.c_str(), hs->grf_prop.local_id); return false; } /* Make sure that additional parts of multitile houses are not available. */ if ((hs->building_flags & BUILDING_HAS_1_TILE) == 0 && (hs->building_availability & HZ_ZONALL) != 0 && (hs->building_availability & HZ_CLIMALL) != 0) { hs->enabled = false; - if (filename != nullptr) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d without a size but marked it as available. Disabling house.", filename, hs->grf_prop.local_id); + if (!filename.empty()) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d without a size but marked it as available. Disabling house.", filename.c_str(), hs->grf_prop.local_id); return false; } @@ -10946,7 +10939,7 @@ static void FinaliseHouseArray() /* We need to check all houses again to we are sure that multitile houses * did get consecutive IDs and none of the parts are missing. */ - if (!IsHouseSpecValid(hs, next1, next2, next3, nullptr)) { + if (!IsHouseSpecValid(hs, next1, next2, next3, std::string{})) { /* GetHouseNorthPart checks 3 houses that are directly before * it in the house pool. If any of those houses have multi-tile * flags set it assumes it's part of a multitile house. Since @@ -11256,7 +11249,7 @@ static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, Spr */ void LoadNewGRFFile(GRFConfig *config, GrfLoadingStage stage, Subdirectory subdir, bool temporary) { - const char *filename = config->filename; + const std::string &filename = config->filename; /* A .grf file is activated only if it was active when the game was * started. If a game is loaded, only its active .grfs will be @@ -11269,7 +11262,7 @@ void LoadNewGRFFile(GRFConfig *config, GrfLoadingStage stage, Subdirectory subdi * processed once at initialization. */ if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) { _cur.grffile = GetFileByFilename(filename); - if (_cur.grffile == nullptr) usererror("File '%s' lost in cache.\n", filename); + if (_cur.grffile == nullptr) usererror("File '%s' lost in cache.\n", filename.c_str()); if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return; if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return; } @@ -11381,7 +11374,7 @@ static void FinalisePriceBaseMultipliers() for (Price p = PR_BEGIN; p < PR_END; p++) { /* No price defined -> nothing to do */ if (!HasBit(features, _price_base_specs[p].grf_feature) || source->price_base_multipliers[p] == INVALID_PRICE_MODIFIER) continue; - DEBUG(grf, 3, "'%s' overrides price base multiplier %d of '%s'", source->filename, p, dest->filename); + DEBUG(grf, 3, "'%s' overrides price base multiplier %d of '%s'", source->filename.c_str(), p, dest->filename.c_str()); dest->price_base_multipliers[p] = source->price_base_multipliers[p]; } } @@ -11399,7 +11392,7 @@ static void FinalisePriceBaseMultipliers() for (Price p = PR_BEGIN; p < PR_END; p++) { /* Already a price defined -> nothing to do */ if (!HasBit(features, _price_base_specs[p].grf_feature) || dest->price_base_multipliers[p] != INVALID_PRICE_MODIFIER) continue; - DEBUG(grf, 3, "Price base multiplier %d from '%s' propagated to '%s'", p, source->filename, dest->filename); + DEBUG(grf, 3, "Price base multiplier %d from '%s' propagated to '%s'", p, source->filename.c_str(), dest->filename.c_str()); dest->price_base_multipliers[p] = source->price_base_multipliers[p]; } } @@ -11417,7 +11410,7 @@ static void FinalisePriceBaseMultipliers() for (Price p = PR_BEGIN; p < PR_END; p++) { if (!HasBit(features, _price_base_specs[p].grf_feature)) continue; if (source->price_base_multipliers[p] != dest->price_base_multipliers[p]) { - DEBUG(grf, 3, "Price base multiplier %d from '%s' propagated to '%s'", p, dest->filename, source->filename); + DEBUG(grf, 3, "Price base multiplier %d from '%s' propagated to '%s'", p, dest->filename.c_str(), source->filename.c_str()); } source->price_base_multipliers[p] = dest->price_base_multipliers[p]; } @@ -11448,11 +11441,11 @@ static void FinalisePriceBaseMultipliers() if (!HasBit(file->grf_features, _price_base_specs[p].grf_feature)) { /* The grf does not define any objects of the feature, * so it must be a difficulty setting. Apply it globally */ - DEBUG(grf, 3, "'%s' sets global price base multiplier %d to %d", file->filename, p, price_base_multipliers[p]); + DEBUG(grf, 3, "'%s' sets global price base multiplier %d to %d", file->filename.c_str(), p, price_base_multipliers[p]); SetPriceBaseMultiplier(p, price_base_multipliers[p]); price_base_multipliers[p] = 0; } else { - DEBUG(grf, 3, "'%s' sets local price base multiplier %d to %d", file->filename, p, price_base_multipliers[p]); + DEBUG(grf, 3, "'%s' sets local price base multiplier %d to %d", file->filename.c_str(), p, price_base_multipliers[p]); } } } @@ -11661,7 +11654,7 @@ void LoadNewGRF(uint load_index, uint num_baseset) Subdirectory subdir = num_grfs < num_baseset ? BASESET_DIR : NEWGRF_DIR; if (!FioCheckFileExists(c->filename, subdir)) { - DEBUG(grf, 0, "NewGRF file is missing '%s'; disabling", c->filename); + DEBUG(grf, 0, "NewGRF file is missing '%s'; disabling", c->filename.c_str()); c->status = GCS_NOT_FOUND; continue; } @@ -11670,9 +11663,9 @@ void LoadNewGRF(uint load_index, uint num_baseset) if (!HasBit(c->flags, GCF_STATIC) && !HasBit(c->flags, GCF_SYSTEM)) { if (num_non_static == MAX_NON_STATIC_GRF_COUNT) { - DEBUG(grf, 0, "'%s' is not loaded as the maximum number of non-static GRFs has been reached", c->filename); + DEBUG(grf, 0, "'%s' is not loaded as the maximum number of non-static GRFs has been reached", c->filename.c_str()); c->status = GCS_DISABLED; - c->error = new GRFError(STR_NEWGRF_ERROR_MSG_FATAL, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED); + c->error = std::make_unique(STR_NEWGRF_ERROR_MSG_FATAL, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED); continue; } num_non_static++; diff --git a/src/newgrf.h b/src/newgrf.h index 7c3501534d..4cb2aaf4fd 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -307,7 +307,7 @@ struct NewSignalStyle; /** Dynamic data of a loaded NewGRF */ struct GRFFile : ZeroedMemoryAllocator { - char *filename; + std::string filename; uint32 grfid; byte grf_version; diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index a108ce60a0..c376eee054 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -40,13 +40,11 @@ /** * Create a new GRFConfig. - * @param filename Set the filename of this GRFConfig to filename. The argument - * is copied so the original string isn't needed after the constructor. + * @param filename Set the filename of this GRFConfig to filename. */ -GRFConfig::GRFConfig(const char *filename) : - num_valid_params(lengthof(param)) +GRFConfig::GRFConfig(const std::string &filename) : + filename(filename), num_valid_params(lengthof(param)) { - if (filename != nullptr) this->filename = stredup(filename); } /** @@ -56,6 +54,7 @@ GRFConfig::GRFConfig(const char *filename) : GRFConfig::GRFConfig(const GRFConfig &config) : ZeroedMemoryAllocator(), ident(config.ident), + filename(config.filename), name(config.name), info(config.info), url(config.url), @@ -71,8 +70,7 @@ GRFConfig::GRFConfig(const GRFConfig &config) : { MemCpyT(this->original_md5sum, config.original_md5sum, lengthof(this->original_md5sum)); MemCpyT(this->param, config.param, lengthof(this->param)); - if (config.filename != nullptr) this->filename = stredup(config.filename); - if (config.error != nullptr) this->error = new GRFError(*config.error); + if (config.error != nullptr) this->error = std::make_unique(*config.error); for (uint i = 0; i < config.param_info.size(); i++) { if (config.param_info[i] == nullptr) { this->param_info.push_back(nullptr); @@ -85,12 +83,6 @@ GRFConfig::GRFConfig(const GRFConfig &config) : /** Cleanup a GRFConfig object. */ GRFConfig::~GRFConfig() { - /* GCF_COPY as in NOT stredupped/alloced the filename */ - if (!HasBit(this->flags, GCF_COPY)) { - free(this->filename); - delete this->error; - } - for (uint i = 0; i < this->param_info.size(); i++) delete this->param_info[i]; } @@ -113,7 +105,7 @@ void GRFConfig::CopyParams(const GRFConfig &src) const char *GRFConfig::GetName() const { const char *name = GetGRFStringFromGRFText(this->name); - return StrEmpty(name) ? this->filename : name; + return StrEmpty(name) ? this->filename.c_str() : name; } /** @@ -641,8 +633,7 @@ compatible_grf: * When the GCF_COPY flag is set, it is certain that the filename is * already a local one, so there is no need to replace it. */ if (!HasBit(c->flags, GCF_COPY)) { - free(c->filename); - c->filename = stredup(f->filename); + c->filename = f->filename; memcpy(c->ident.md5sum, f->ident.md5sum, sizeof(c->ident.md5sum)); c->name = f->name; c->info = f->name; @@ -750,7 +741,7 @@ bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length const char *name = nullptr; if (c->name != nullptr) name = GetGRFStringFromGRFText(c->name); - if (name == nullptr) name = c->filename; + if (name == nullptr) name = c->filename.c_str(); UpdateNewGRFScanStatus(this->num_scanned, name); VideoDriver::GetInstance()->GameLoopPause(); @@ -903,5 +894,5 @@ char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last) */ const char *GRFConfig::GetTextfile(TextfileType type) const { - return ::GetTextfile(type, NEWGRF_DIR, this->filename); + return ::GetTextfile(type, NEWGRF_DIR, this->filename.c_str()); } diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 833fa761d6..669b4b5094 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -155,7 +155,7 @@ struct GRFParameterInfo { /** Information about GRF, used in the game and (part of it) in savegames */ struct GRFConfig : ZeroedMemoryAllocator { - GRFConfig(const char *filename = nullptr); + GRFConfig(const std::string &filename = std::string{}); GRFConfig(const GRFConfig &config); ~GRFConfig(); @@ -164,12 +164,12 @@ struct GRFConfig : ZeroedMemoryAllocator { GRFIdentifier ident; ///< grfid and md5sum to uniquely identify newgrfs uint8 original_md5sum[16]; ///< MD5 checksum of original file if only a 'compatible' file was loaded - char *filename; ///< Filename - either with or without full path + std::string filename; ///< Filename - either with or without full path std::string full_filename; ///< NOSAVE: Full filename GRFTextWrapper name; ///< NOSAVE: GRF name (Action 0x08) GRFTextWrapper info; ///< NOSAVE: GRF info (author, copyright, ...) (Action 0x08) GRFTextWrapper url; ///< NOSAVE: URL belonging to this GRF. - GRFError *error; ///< NOSAVE: Error/Warning during GRF loading (Action 0x0B) + std::unique_ptr error; ///< NOSAVE: Error/Warning during GRF loading (Action 0x0B) uint32 version; ///< NOSAVE: Version a NewGRF can set so only the newest NewGRF is shown uint32 min_loadable_version; ///< NOSAVE: Minimum compatible version a NewGRF can define @@ -194,7 +194,7 @@ struct GRFConfig : ZeroedMemoryAllocator { const char *GetDisplayPath() const { - return !this->full_filename.empty() ? this->full_filename.c_str() : this->filename; + return !this->full_filename.empty() ? this->full_filename.c_str() : this->filename.c_str(); } void SetParameterDefaults(); diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index bed3eac6c2..1b87ea3ad2 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -636,7 +636,7 @@ struct NewGRFInspectWindow : Window { GRFConfig *grfconfig = GetGRFConfig(grfid); if (grfconfig) { this->DrawString(r, i++, " Name: %s", grfconfig->GetName()); - this->DrawString(r, i++, " File: %s", grfconfig->filename); + this->DrawString(r, i++, " File: %s", grfconfig->filename.c_str()); } } @@ -1309,7 +1309,7 @@ struct SpriteAlignerWindow : Window { break; case WID_SA_LIST: SetDParamMaxDigits(0, 6); - size->width = GetStringBoundingBox(STR_BLACK_COMMA).width + padding.width; + size->width = GetStringBoundingBox(STR_JUST_COMMA).width + padding.width; resize->height = FONT_HEIGHT_NORMAL + padding.height; resize->width = 1; fill->height = resize->height; @@ -1358,7 +1358,7 @@ struct SpriteAlignerWindow : Window { Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); for (int i = this->vscroll->GetPosition(); i < max; i++) { SetDParam(0, list[i]); - DrawString(ir, STR_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE); + DrawString(ir, STR_JUST_COMMA, TC_BLACK, SA_RIGHT | SA_FORCE); ir.top += step_size; } break; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index f3687c303a..191efe2b05 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1376,7 +1376,7 @@ int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, cons } -static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first) +static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, uint16_t base_random_bits, bool first) { /* We can't trigger a non-existent vehicle... */ assert(v != nullptr); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 2dfacd9cb9..556db0eaeb 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -85,7 +85,7 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) } /* Draw filename or not if it is not known (GRF sent over internet) */ - if (c->filename != nullptr) { + if (!c->filename.empty()) { SetDParamStr(0, c->filename); tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_FILENAME); } @@ -139,7 +139,7 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) /* Draw GRF info if it exists */ if (!StrEmpty(c->GetDescription())) { SetDParamStr(0, c->GetDescription()); - tr.top = DrawStringMultiLine(tr, STR_BLACK_RAW_STRING); + tr.top = DrawStringMultiLine(tr, STR_JUST_RAW_STRING, TC_BLACK); } else { tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NO_INFO); } @@ -1448,7 +1448,7 @@ private: { filter.ResetState(); filter.AddLine((*a)->GetName()); - filter.AddLine((*a)->filename); + filter.AddLine((*a)->filename.c_str()); filter.AddLine((*a)->GetDescription()); return filter.GetState();; } diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 87e0375cc9..cfbea07308 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -939,7 +939,7 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const if (grfid) { extern GRFFile *GetFileByGRFID(uint32 grfid); const GRFFile *grffile = GetFileByGRFID(grfid); - DEBUG(misc, 0, "Too many NewGRF string parameters (in %X, %s).", BSWAP32(grfid), grffile ? grffile->filename : "????"); + DEBUG(misc, 0, "Too many NewGRF string parameters (in %X, %s).", BSWAP32(grfid), grffile ? grffile->filename.c_str() : "????"); } else { DEBUG(misc, 0, "Too many NewGRF string parameters."); } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 9c1eaf7791..96adeef3d9 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -86,7 +86,7 @@ static const NWidgetPart _nested_normal_news_widgets[] = { NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX), SetPadding(0, 0, 0, 1), NWidget(NWID_SPACER), SetFill(1, 0), NWidget(NWID_VERTICAL), - NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_DATE_LONG_SMALL, STR_NULL), + NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetTextStyle(TC_BLACK, FS_SMALL), NWidget(NWID_SPACER), SetFill(0, 1), EndContainer(), EndContainer(), @@ -163,7 +163,7 @@ static const NWidgetPart _nested_thin_news_widgets[] = { NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX), SetPadding(0, 0, 0, 1), NWidget(NWID_SPACER), SetFill(1, 0), NWidget(NWID_VERTICAL), - NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_DATE_LONG_SMALL, STR_NULL), + NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetTextStyle(TC_BLACK, FS_SMALL), NWidget(NWID_SPACER), SetFill(0, 1), EndContainer(), EndContainer(), @@ -1167,7 +1167,7 @@ struct MessageHistoryWindow : Window { /* Months are off-by-one, so it's actually 8. Not using * month 12 because the 1 is usually less wide. */ SetDParam(0, ConvertYMDToDate(ORIGINAL_MAX_YEAR, 7, 30)); - this->date_width = GetStringBoundingBox(STR_SHORT_DATE).width + WidgetDimensions::scaled.hsep_wide; + this->date_width = GetStringBoundingBox(STR_JUST_DATE_TINY).width + WidgetDimensions::scaled.hsep_wide; size->height = 4 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); // At least 4 lines are visible. size->width = std::max(200u, size->width); // At least 200 pixels wide. @@ -1198,7 +1198,7 @@ struct MessageHistoryWindow : Window { int y = news.top; for (int n = this->vscroll->GetCapacity(); n > 0; n--) { SetDParam(0, ni->date); - DrawString(date.left, date.right, y, STR_SHORT_DATE); + DrawString(date.left, date.right, y, STR_JUST_DATE_TINY, TC_WHITE); DrawNewsString(news.left, news.right, y, TC_WHITE, ni); y += this->line_height; diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 2bdaedd89c..34ab1c2321 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -713,7 +713,7 @@ static const NWidgetPart _nested_build_object_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY, WID_BO_OBJECT_SPRITE), SetDataTip(0x0, STR_OBJECT_BUILD_PREVIEW_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), - NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_NAME), SetDataTip(STR_ORANGE_STRING, STR_NULL), + NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_NAME), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_SIZE), SetDataTip(STR_OBJECT_BUILD_SIZE, STR_NULL), EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BO_SELECT_SCROLL), diff --git a/src/openttd.cpp b/src/openttd.cpp index 0e110c6193..48ecea4d84 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -355,7 +355,7 @@ static void WriteSavegameInfo(const char *name) for (GRFConfig *c = _load_check_data.grfconfig; c != nullptr; c = c->next) { char md5sum[33]; md5sumToString(md5sum, lastof(md5sum), HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum); - p += seprintf(p, lastof(buf), "%08X %s %s\n", c->ident.grfid, md5sum, c->filename); + p += seprintf(p, lastof(buf), "%08X %s %s\n", c->ident.grfid, md5sum, c->filename.c_str()); } } @@ -1409,7 +1409,7 @@ void WriteVehicleInfo(char *&p, const char *last, const Vehicle *u, const Vehicl p += seprintf(p, last, ", GRF: %08X", BSWAP32(grfid)); GRFConfig *grfconfig = GetGRFConfig(grfid); if (grfconfig) { - p += seprintf(p, last, ", %s, %s", grfconfig->GetName(), grfconfig->filename); + p += seprintf(p, last, ", %s, %s", grfconfig->GetName(), grfconfig->filename.c_str()); } } } diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 67d7035e0b..3e341fe5c1 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -222,7 +222,7 @@ public: int text_right = rtl ? rect_left - WidgetDimensions::scaled.framerect.left : ir.right; int text_top = ir.top; SetDParam(0, cs->name); - DrawString(text_left, text_right, text_top, STR_BLACK_STRING); + DrawString(text_left, text_right, text_top, STR_JUST_STRING, TC_BLACK); } } @@ -2240,7 +2240,7 @@ public: /* Set the strings for the dropdown boxes. */ this->GetWidget(WID_O_COND_VARIABLE)->widget_data = OrderStringForVariable(this->vehicle, ocv); this->GetWidget(WID_O_COND_COMPARATOR)->widget_data = GetComparatorStrings(this->vehicle, order)[order->GetConditionComparator()]; - this->GetWidget(WID_O_COND_VALUE)->widget_data = (ocv == OCV_TIME_DATE && order->GetConditionValue() == TRTDVF_HOUR_MINUTE) ? STR_BLACK_TIME_HHMM : STR_BLACK_COMMA; + this->GetWidget(WID_O_COND_VALUE)->widget_data = (ocv == OCV_TIME_DATE && order->GetConditionValue() == TRTDVF_HOUR_MINUTE) ? STR_BLACK_TIME_HHMM : STR_JUST_COMMA; this->SetWidgetDisabledState(WID_O_COND_COMPARATOR, ocv == OCV_UNCONDITIONALLY || ocv == OCV_PERCENT); this->SetWidgetDisabledState(WID_O_COND_VALUE, ocv == OCV_REQUIRES_SERVICE || ocv == OCV_UNCONDITIONALLY); break; @@ -3630,7 +3630,7 @@ static const NWidgetPart _nested_orders_train_widgets[] = { SetDataTip(STR_NULL, STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP), SetResize(1, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_COND_VALUE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_COND_VALUE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_COMMA, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_COMMA, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP), SetResize(1, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_COND_CARGO), SetMinimalSize(124, 12), SetFill(1, 0), SetDataTip(STR_NULL, STR_ORDER_CONDITIONAL_CARGO_TOOLTIP), SetResize(1, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_COND_SLOT), SetMinimalSize(124, 12), SetFill(1, 0), @@ -3649,7 +3649,7 @@ static const NWidgetPart _nested_orders_train_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_CHANGE_COUNTER), SetMinimalSize(124, 12), SetFill(1, 0), SetDataTip(STR_NULL, STR_ORDER_CHANGE_COUNTER_TOOLTIP), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_COUNTER_VALUE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_COMMA, STR_TRACE_RESTRICT_COND_VALUE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_COMMA, STR_TRACE_RESTRICT_COND_VALUE_TOOLTIP), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), @@ -3661,7 +3661,7 @@ static const NWidgetPart _nested_orders_train_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_DEPARTURE_VIA_TYPE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_STRING, STR_ORDER_LABEL_DEPARTURES_VIA_TYPE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_STRING, STR_ORDER_LABEL_DEPARTURES_VIA_TYPE_TOOLTIP), SetResize(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 0), SetResize(1, 0), EndContainer(), EndContainer(), @@ -3774,7 +3774,7 @@ static const NWidgetPart _nested_orders_widgets[] = { SetDataTip(STR_NULL, STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP), SetResize(1, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_COND_VALUE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_COND_VALUE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_COMMA, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_COMMA, STR_ORDER_CONDITIONAL_VALUE_TOOLTIP), SetResize(1, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_COND_CARGO), SetMinimalSize(124, 12), SetFill(1, 0), SetDataTip(STR_NULL, STR_ORDER_CONDITIONAL_CARGO_TOOLTIP), SetResize(1, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_COND_SLOT), SetMinimalSize(124, 12), SetFill(1, 0), @@ -3797,7 +3797,7 @@ static const NWidgetPart _nested_orders_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_CHANGE_COUNTER), SetMinimalSize(124, 12), SetFill(1, 0), SetDataTip(STR_NULL, STR_ORDER_CHANGE_COUNTER_TOOLTIP), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_COUNTER_VALUE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_COMMA, STR_TRACE_RESTRICT_COND_VALUE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_COMMA, STR_TRACE_RESTRICT_COND_VALUE_TOOLTIP), SetResize(1, 0), EndContainer(), /* Buttons for changing a text label */ @@ -3813,7 +3813,7 @@ static const NWidgetPart _nested_orders_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_O_DEPARTURE_VIA_TYPE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_STRING, STR_ORDER_LABEL_DEPARTURES_VIA_TYPE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_STRING, STR_ORDER_LABEL_DEPARTURES_VIA_TYPE_TOOLTIP), SetResize(1, 0), EndContainer(), /* No buttons */ diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index c31ab4c39e..144e43eeb5 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -325,7 +325,7 @@ static NWidgetBase *MakeSpacebarKeys(int *biggest_index) static const NWidgetPart _nested_osk_widgets[] = { - NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetDataTip(STR_WHITE_STRING, STR_NULL), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 12), SetPadding(2, 2, 2, 2), EndContainer(), diff --git a/src/programmable_signals_gui.cpp b/src/programmable_signals_gui.cpp index 10205627c9..a6b77cb1b6 100644 --- a/src/programmable_signals_gui.cpp +++ b/src/programmable_signals_gui.cpp @@ -938,7 +938,7 @@ static const NWidgetPart _nested_program_widgets[] = { EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, PROGRAM_WIDGET_SEL_TOP_RIGHT), NWidget(WWT_TEXTBTN, COLOUR_GREY, PROGRAM_WIDGET_COND_VALUE), SetMinimalSize(124, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_COMMA, STR_PROGSIG_COND_VALUE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_COMMA, STR_PROGSIG_COND_VALUE_TOOLTIP), SetResize(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, PROGRAM_WIDGET_COND_SET_SIGNAL), SetMinimalSize(124, 12), SetFill(1, 0), SetDataTip(STR_PROGSIG_COND_SET_SIGNAL, STR_PROGSIG_COND_SET_SIGNAL_TOOLTIP), SetResize(1, 0), EndContainer(), diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index ce62eca7b8..4149c0f6f7 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -982,7 +982,7 @@ HotkeyList BuildRailToolbarWindow::hotkeys("railtoolbar", railtoolbar_hotkeys, R static const NWidgetPart _nested_build_rail_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), - NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_RAT_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_RAT_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -1750,7 +1750,7 @@ static const NWidgetPart _nested_station_builder_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(7, 0), SetFill(1, 0), EndContainer(), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_ORANGE_STRING, STR_NULL), SetPadding(1, 2, 4, 2), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetPadding(1, 2, 4, 2), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), SetPadding(0, 2, 0, 2), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), @@ -2272,7 +2272,7 @@ static const NWidgetPart _nested_signal_builder_widgets[] = { NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NO_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NO_ENTRY_TOOLTIP), EndContainer(), SetFill(1, 1), EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_ORANGE_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_JUST_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetTextStyle(TC_ORANGE), SetFill(1, 1), NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2), NWidget(NWID_SPACER), SetFill(1, 0), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_DECREASE), SetMinimalSize(9, 12), SetDataTip(AWV_DECREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP), @@ -2287,7 +2287,7 @@ static const NWidgetPart _nested_signal_builder_widgets[] = { EndContainer(), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_STYLE_SEL), - NWidget(WWT_DROPDOWN, COLOUR_DARK_GREEN, WID_BS_STYLE), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_BUILD_SIGNAL_STYLE_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_DARK_GREEN, WID_BS_STYLE), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_BUILD_SIGNAL_STYLE_TOOLTIP), EndContainer(), EndContainer(), }; diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 43635cbcaa..4fb738eb91 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -934,7 +934,7 @@ HotkeyList BuildRoadToolbarWindow::tram_hotkeys("tramtoolbar", tramtoolbar_hotke static const NWidgetPart _nested_build_road_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), - NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -979,7 +979,7 @@ static WindowDesc _build_road_desc( static const NWidgetPart _nested_build_tramway_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), - NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -1040,7 +1040,7 @@ Window *ShowBuildRoadToolbar(RoadType roadtype) static const NWidgetPart _nested_build_road_scen_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), - NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -1077,7 +1077,7 @@ static WindowDesc _build_road_scen_desc( static const NWidgetPart _nested_build_tramway_scen_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), - NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_ROT_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -1795,7 +1795,7 @@ static const NWidgetPart _nested_road_station_picker_widgets[] = { NWidget(NWID_SPACER), SetFill(1, 0), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_TYPE_SEL), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_ORANGE_STRING, STR_NULL), SetPadding(4, 2, 4, 2), SetFill(1, 0), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetPadding(4, 2, 4, 2), SetFill(1, 0), EndContainer(), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetPadding(WidgetDimensions::unscaled.framerect), SetFill(1, 0), NWidget(NWID_HORIZONTAL), @@ -1881,7 +1881,7 @@ static const NWidgetPart _nested_tram_station_picker_widgets[] = { NWidget(NWID_SPACER), SetFill(1, 0), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_SHOW_NEWST_TYPE_SEL), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_ORANGE_STRING, STR_NULL), SetPadding(4, 2, 4, 2), SetFill(1, 0), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BROS_SHOW_NEWST_TYPE), SetMinimalSize(144, 8), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), SetPadding(4, 2, 4, 2), SetFill(1, 0), EndContainer(), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL), SetPadding(WidgetDimensions::unscaled.framerect), SetFill(1, 0), NWidget(NWID_HORIZONTAL), diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index bf46c8929d..44e30beab0 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -315,7 +315,7 @@ CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engin v->build_year = _cur_year; v->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); v->SetFrontEngine(); v->roadtype = rt; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 472a0c8efd..1d96994fd8 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -456,12 +456,12 @@ static void CDECL HandleSavegameLoadCrash(int signum) char replaced_md5[40]; md5sumToString(original_md5, lastof(original_md5), c->original_md5sum); md5sumToString(replaced_md5, lastof(replaced_md5), replaced->md5sum); - p += seprintf(p, lastof(buffer), "NewGRF %08X (checksum %s) not found.\n Loaded NewGRF \"%s\" (checksum %s) with same GRF ID instead.\n", BSWAP32(c->ident.grfid), original_md5, c->filename, replaced_md5); + p += seprintf(p, lastof(buffer), "NewGRF %08X (checksum %s) not found.\n Loaded NewGRF \"%s\" (checksum %s) with same GRF ID instead.\n", BSWAP32(c->ident.grfid), original_md5, c->filename.c_str(), replaced_md5); } if (c->status == GCS_NOT_FOUND) { char buf[40]; md5sumToString(buf, lastof(buf), c->ident.md5sum); - p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s.\n", BSWAP32(c->ident.grfid), c->filename, buf); + p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s.\n", BSWAP32(c->ident.grfid), c->filename.c_str(), buf); } } } else { diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index 9282dc8453..b2a3e4fa4b 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -198,6 +198,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { { XSLFI_CONSISTENT_PARTIAL_Z, XSCF_NULL, 1, 1, "consistent_partial_z", nullptr, nullptr, nullptr }, { XSLFI_MORE_CARGO_AGE, XSCF_NULL, 1, 1, "more_cargo_age", nullptr, nullptr, nullptr }, { XSLFI_AI_START_DATE, XSCF_NULL, 1, 1, "slv_ai_start_date", nullptr, nullptr, nullptr }, + { XSLFI_EXTEND_VEHICLE_RANDOM, XSCF_NULL, 1, 1, "slv_extend_vehicle_random", nullptr, nullptr, nullptr }, { XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker }; diff --git a/src/saveload/extended_ver_sl.h b/src/saveload/extended_ver_sl.h index 77f36b95ac..71d6175d4d 100644 --- a/src/saveload/extended_ver_sl.h +++ b/src/saveload/extended_ver_sl.h @@ -150,6 +150,7 @@ enum SlXvFeatureIndex { XSLFI_CONSISTENT_PARTIAL_Z, ///< See: SLV_CONSISTENT_PARTIAL_Z (PR #10570) XSLFI_MORE_CARGO_AGE, ///< See: SLV_MORE_CARGO_AGE (PR #10596) XSLFI_AI_START_DATE, ///< See: SLV_AI_START_DATE (PR #10653) + XSLFI_EXTEND_VEHICLE_RANDOM, ///< See: SLV_EXTEND_VEHICLE_RANDOM (PR #10701) XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp index 47244353bf..dd5932a750 100644 --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -67,7 +67,7 @@ void Load_NewGRFMapping(OverrideManagerBase &mapping) static std::string _grf_name; static const SaveLoad _grfconfig_desc[] = { - SLE_STR(GRFConfig, filename, SLE_STR, 0x40), + SLE_SSTR(GRFConfig, filename, SLE_STR), SLE_VAR(GRFConfig, ident.grfid, SLE_UINT32), SLE_ARR(GRFConfig, ident.md5sum, SLE_UINT8, 16), SLE_CONDVAR(GRFConfig, version, SLE_UINT32, SLV_151, SL_MAX_VERSION), diff --git a/src/saveload/saveload_common.h b/src/saveload/saveload_common.h index 494ad7a6f8..384a73426b 100644 --- a/src/saveload/saveload_common.h +++ b/src/saveload/saveload_common.h @@ -362,6 +362,8 @@ enum SaveLoadVersion : uint16 { SLV_LINKGRAPH_SECONDS, ///< 308 PR#10610 Store linkgraph update intervals in seconds instead of days. SLV_AI_START_DATE, ///< 309 PR#10653 Removal of individual AI start dates and added a generic one. + SLV_EXTEND_VEHICLE_RANDOM, ///< 310 PR#10701 Extend vehicle random bits. + SL_MAX_VERSION, ///< Highest possible saveload version SL_SPRING_2013_v2_0_102 = 220, diff --git a/src/saveload/upstream/newgrf_sl.cpp b/src/saveload/upstream/newgrf_sl.cpp index 9a85dd9bfe..f7ba098586 100644 --- a/src/saveload/upstream/newgrf_sl.cpp +++ b/src/saveload/upstream/newgrf_sl.cpp @@ -57,7 +57,7 @@ void NewGRFMappingChunkHandler::Load() const static const SaveLoad _grfconfig_desc[] = { - SLE_STR(GRFConfig, filename, SLE_STR, 0x40), + SLE_SSTR(GRFConfig, filename, SLE_STR), SLE_VAR(GRFConfig, ident.grfid, SLE_UINT32), SLE_ARR(GRFConfig, ident.md5sum, SLE_UINT8, 16), SLE_CONDVAR(GRFConfig, version, SLE_UINT32, SLV_151, SL_MAX_VERSION), diff --git a/src/saveload/upstream/vehicle_sl.cpp b/src/saveload/upstream/vehicle_sl.cpp index 093686bf20..e77904bce4 100644 --- a/src/saveload/upstream/vehicle_sl.cpp +++ b/src/saveload/upstream/vehicle_sl.cpp @@ -165,7 +165,8 @@ public: SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65), SLE_CONDVAR(Vehicle, value, SLE_INT64, SLV_65, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, random_bits, SLE_FILE_U8 | SLE_VAR_U16, SLV_2, SLV_EXTEND_VEHICLE_RANDOM), + SLE_CONDVAR(Vehicle, random_bits, SLE_UINT16, SLV_EXTEND_VEHICLE_RANDOM, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, SLV_2, SL_MAX_VERSION), SLE_CONDREF(Vehicle, next_shared, REF_VEHICLE, SLV_2, SL_MAX_VERSION), diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 0d87398761..be7381d1a5 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -790,7 +790,8 @@ SaveLoadTable GetVehicleDescription(VehicleType vt) SLE_CONDVAR(Vehicle, value, SLE_INT64, SLV_65, SL_MAX_VERSION), SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST, 1, 1)), - SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR_X(Vehicle, random_bits, SLE_FILE_U8 | SLE_VAR_U16, SLV_2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTEND_VEHICLE_RANDOM, 0, 0)), + SLE_CONDVAR_X(Vehicle, random_bits, SLE_UINT16, SLV_2, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTEND_VEHICLE_RANDOM, 1)), SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, SLV_2, SL_MAX_VERSION), SLEG_CONDVAR_X(_old_ahead_separation, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 1, 4)), diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 83449fff89..93cceb05c4 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -333,7 +333,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user for (const GRFConfig *c = _game_mode == GM_MENU ? nullptr : _grfconfig; c != nullptr; c = c->next) { p += seprintf(p, lastof(buf), "%08X ", BSWAP32(c->ident.grfid)); p = md5sumToString(p, lastof(buf), c->ident.md5sum); - p += seprintf(p, lastof(buf), " %s\n", c->filename); + p += seprintf(p, lastof(buf), " %s\n", c->filename.c_str()); } p = strecpy(p, "\nCompanies:\n", lastof(buf)); for (const Company *c : Company::Iterate()) { diff --git a/src/script/api/script_rail.cpp b/src/script/api/script_rail.cpp index a8922a28b4..301d5925af 100644 --- a/src/script/api/script_rail.cpp +++ b/src/script/api/script_rail.cpp @@ -196,7 +196,7 @@ int index = 0; const StationSpec *spec = StationClass::GetByGrf(file->grfid, res, &index); if (spec == nullptr) { - DEBUG(grf, 1, "%s returned an invalid station ID for 'AI construction/purchase selection (18)' callback", file->filename); + DEBUG(grf, 1, "%s returned an invalid station ID for 'AI construction/purchase selection (18)' callback", file->filename.c_str()); } else { /* We might have gotten an usable station spec. Try to build it, but if it fails we'll fall back to the original station. */ if (ScriptObject::DoCommandEx(tile, p1, p2 | spec->cls_id, index, CMD_BUILD_RAIL_STATION)) return true; diff --git a/src/settings.cpp b/src/settings.cpp index ca8727943f..79ab978e5f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -175,10 +175,11 @@ public: * location. These versions assist with situations like that. */ enum IniFileVersion : uint32 { - IFV_0, ///< 0 All versions prior to introduction. - IFV_PRIVATE_SECRETS, ///< 1 PR#9298 Moving of settings from openttd.cfg to private.cfg / secrets.cfg. - IFV_GAME_TYPE, ///< 2 PR#9515 Convert server_advertise to server_game_type. - IFV_LINKGRAPH_SECONDS, ///< 3 PR#10610 Store linkgraph update intervals in seconds instead of days. + IFV_0, ///< 0 All versions prior to introduction. + IFV_PRIVATE_SECRETS, ///< 1 PR#9298 Moving of settings from openttd.cfg to private.cfg / secrets.cfg. + IFV_GAME_TYPE, ///< 2 PR#9515 Convert server_advertise to server_game_type. + IFV_LINKGRAPH_SECONDS, ///< 3 PR#10610 Store linkgraph update intervals in seconds instead of days. + IFV_NETWORK_PRIVATE_SETTINGS, ///< 4 PR#10762 Move no_http_content_downloads / use_relay_service to private settings. IFV_MAX_VERSION, ///< Highest possible ini-file version. }; @@ -2227,7 +2228,7 @@ static void GRFSaveConfig(IniFile &ini, const char *grpname, const GRFConfig *li char *pos = key + seprintf(key, lastof(key), "%08X|", BSWAP32(c->ident.grfid)); pos = md5sumToString(pos, lastof(key), c->ident.md5sum); - seprintf(pos, lastof(key), "|%s", c->filename); + seprintf(pos, lastof(key), "|%s", c->filename.c_str()); group->GetItem(key, true)->SetValue(params); } } @@ -2329,6 +2330,31 @@ void LoadFromConfig(bool startup) _settings_newgame.linkgraph.recalc_time *= SECONDS_PER_DAY; } + if (generic_version < IFV_NETWORK_PRIVATE_SETTINGS) { + IniGroup *network = generic_ini.GetGroup("network", false); + if (network != nullptr) { + IniItem *no_http_content_downloads = network->GetItem("no_http_content_downloads", false); + if (no_http_content_downloads != nullptr) { + if (no_http_content_downloads->value == "true") { + _settings_client.network.no_http_content_downloads = true; + } else if (no_http_content_downloads->value == "false") { + _settings_client.network.no_http_content_downloads = false; + } + } + + IniItem *use_relay_service = network->GetItem("use_relay_service", false); + if (use_relay_service != nullptr) { + if (use_relay_service->value == "never") { + _settings_client.network.use_relay_service = UseRelayService::URS_NEVER; + } else if (use_relay_service->value == "ask") { + _settings_client.network.use_relay_service = UseRelayService::URS_ASK; + } else if (use_relay_service->value == "allow") { + _settings_client.network.use_relay_service = UseRelayService::URS_ALLOW; + } + } + } + } + _grfconfig_newgame = GRFLoadConfig(generic_ini, "newgrf", false); _grfconfig_static = GRFLoadConfig(generic_ini, "newgrf-static", true); AILoadConfig(generic_ini, "ai_players"); @@ -2399,6 +2425,13 @@ void SaveToConfig() network->RemoveItem("server_advertise"); } } + if (generic_version < IFV_NETWORK_PRIVATE_SETTINGS) { + IniGroup *network = generic_ini.GetGroup("network", false); + if (network != nullptr) { + network->RemoveItem("no_http_content_downloads"); + network->RemoveItem("use_relay_service"); + } + } HandleSettingDescs(generic_ini, private_ini, secrets_ini, IniSaveSettings, IniSaveSettingList); GRFSaveConfig(generic_ini, "newgrf", _grfconfig_newgame); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 100db79db9..24d7e1480f 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -360,17 +360,17 @@ struct GameOptionsWindow : Window { switch (widget) { case WID_GO_BASE_GRF_DESCRIPTION: SetDParamStr(0, BaseGraphics::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode())); - DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING); + DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK); break; case WID_GO_BASE_SFX_DESCRIPTION: SetDParamStr(0, BaseSounds::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode())); - DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING); + DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK); break; case WID_GO_BASE_MUSIC_DESCRIPTION: SetDParamStr(0, BaseMusic::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode())); - DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING); + DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK); break; case WID_GO_GUI_SCALE: @@ -412,7 +412,7 @@ struct GameOptionsWindow : Window { int y = 0; for (int i = 0; i < BaseGraphics::GetNumSets(); i++) { SetDParamStr(0, BaseGraphics::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode())); - y = std::max(y, GetStringHeight(STR_BLACK_RAW_STRING, wid->current_x)); + y = std::max(y, GetStringHeight(STR_JUST_RAW_STRING, wid->current_x)); } changed |= wid->UpdateVerticalSize(y); @@ -420,7 +420,7 @@ struct GameOptionsWindow : Window { y = 0; for (int i = 0; i < BaseSounds::GetNumSets(); i++) { SetDParamStr(0, BaseSounds::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode())); - y = std::max(y, GetStringHeight(STR_BLACK_RAW_STRING, wid->current_x)); + y = std::max(y, GetStringHeight(STR_JUST_RAW_STRING, wid->current_x)); } changed |= wid->UpdateVerticalSize(y); @@ -428,7 +428,7 @@ struct GameOptionsWindow : Window { y = 0; for (int i = 0; i < BaseMusic::GetNumSets(); i++) { SetDParamStr(0, BaseMusic::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode())); - y = std::max(y, GetStringHeight(STR_BLACK_RAW_STRING, wid->current_x)); + y = std::max(y, GetStringHeight(STR_JUST_RAW_STRING, wid->current_x)); } changed |= wid->UpdateVerticalSize(y); @@ -798,15 +798,15 @@ static const NWidgetPart _nested_game_options_widgets[] = { /* General tab */ NWidget(NWID_VERTICAL), SetPadding(10), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_LANGUAGE, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_LANG_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_LANGUAGE_TOOLTIP), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_LANG_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_LANGUAGE_TOOLTIP), SetFill(1, 0), EndContainer(), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_AUTOSAVE_FRAME, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_AUTOSAVE_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_AUTOSAVE_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_STRING, STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP), SetFill(1, 0), EndContainer(), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_CURRENCY_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_CURRENCY_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_STRING, STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP), SetFill(1, 0), EndContainer(), EndContainer(), @@ -833,7 +833,7 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12),SetDataTip(STR_GAME_OPTIONS_RESOLUTION, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(1, 0), SetFill(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_RESOLUTION_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_RESOLUTION_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_RESOLUTION_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_STRING, STR_GAME_OPTIONS_RESOLUTION_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetDataTip(STR_GAME_OPTIONS_REFRESH_RATE, STR_NULL), @@ -865,7 +865,7 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_GRF, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP), NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_STATUS), SetMinimalSize(100, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(200, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0), @@ -894,7 +894,7 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP), NWidget(NWID_SPACER), SetMinimalSize(100, 12), SetFill(1, 0), EndContainer(), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(200, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0), @@ -907,7 +907,7 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_MUSIC, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP), NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_STATUS), SetMinimalSize(100, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7), @@ -1461,7 +1461,7 @@ void SettingEntry::DrawSetting(GameSettings *settings_ptr, int left, int right, /* We do not allow changes of some items when we are a client in a networkgame */ bool editable = sd->IsEditable(); - SetDParam(0, highlight ? STR_ORANGE_STRING1_WHITE : STR_ORANGE_STRING1_LTBLUE); + SetDParam(0, STR_CONFIG_SETTING_VALUE); int32 value = sd->Read(ResolveObject(settings_ptr, sd)); if (sd->IsBoolSetting()) { /* Draw checkbox for boolean-value either on/off */ @@ -1505,7 +1505,7 @@ void CargoDestPerCargoSettingEntry::DrawSettingString(uint left, uint right, int { assert(this->setting->str == STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO); SetDParam(0, CargoSpec::Get(this->cargo)->name); - SetDParam(1, highlight ? STR_ORANGE_STRING1_WHITE : STR_ORANGE_STRING1_LTBLUE); + SetDParam(1, STR_CONFIG_SETTING_VALUE); std::unique_ptr tempdata; this->SetValueDParams(2, value, tempdata); DrawString(left, right, y, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO_PARAM, highlight ? TC_WHITE : TC_LIGHT_BLUE); @@ -3078,11 +3078,11 @@ static const NWidgetPart _nested_settings_selection_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(WidgetDimensions::unscaled.frametext.top, WidgetDimensions::unscaled.vsep_normal, WidgetDimensions::unscaled.frametext.bottom), NWidget(NWID_HORIZONTAL), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.hsep_wide, WidgetDimensions::unscaled.frametext.right), NWidget(WWT_TEXT, COLOUR_MAUVE, WID_GS_RESTRICT_CATEGORY), SetDataTip(STR_CONFIG_SETTING_RESTRICT_CATEGORY, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_MAUVE, WID_GS_RESTRICT_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_STRING, STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_MAUVE, WID_GS_RESTRICT_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.hsep_wide, WidgetDimensions::unscaled.frametext.right), NWidget(WWT_TEXT, COLOUR_MAUVE, WID_GS_RESTRICT_TYPE), SetDataTip(STR_CONFIG_SETTING_RESTRICT_TYPE, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_MAUVE, WID_GS_TYPE_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_BLACK_STRING, STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_MAUVE, WID_GS_TYPE_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(WidgetDimensions::unscaled.frametext.left, WidgetDimensions::unscaled.hsep_wide, WidgetDimensions::unscaled.frametext.right), NWidget(WWT_TEXT, COLOUR_MAUVE), SetFill(0, 1), SetDataTip(STR_CONFIG_SETTING_FILTER_TITLE, STR_NULL), diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 237ebe1ab3..d87c89e38d 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -1164,7 +1164,7 @@ CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, const Engine *e, u v->date_of_last_service = _date; v->build_year = _cur_year; v->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); v->UpdateCache(); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index d8b38a7812..efc46664e6 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -536,7 +536,7 @@ struct SignWindow : Window, SignList { static const NWidgetPart _nested_query_sign_edit_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_QES_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_QES_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_QES_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_EDIT_SIGN_LOCATION_TOOLTIP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 45782cfd02..8732af11c6 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -122,7 +122,7 @@ struct StatusBarWindow : Window { int64 max_money = UINT32_MAX; for (const Company *c : Company::Iterate()) max_money = std::max(c->money, max_money); SetDParam(0, 100LL * max_money); - d = GetStringBoundingBox(STR_COMPANY_MONEY); + d = GetStringBoundingBox(STR_JUST_CURRENCY_LONG); break; } @@ -143,7 +143,7 @@ struct StatusBarWindow : Window { case WID_S_LEFT: /* Draw the date */ SetDParam(0, _scaled_date_ticks); - DrawString(tr, STR_WHITE_DATE_WALLCLOCK_LONG, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(tr, STR_JUST_DATE_LONG, TC_WHITE, SA_HOR_CENTER); break; case WID_S_RIGHT: { @@ -154,7 +154,7 @@ struct StatusBarWindow : Window { const Company *c = Company::GetIfValid(_local_company); if (c != nullptr) { SetDParam(0, c->money); - DrawString(tr, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(tr, STR_JUST_CURRENCY_LONG, TC_WHITE, SA_HOR_CENTER); } } break; diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 007364ed48..955126f165 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -334,7 +334,7 @@ protected: switch (pe.type) { case SPET_TEXT: SetDParamStr(0, pe.text); - return GetStringHeight(STR_BLACK_RAW_STRING, max_width); + return GetStringHeight(STR_JUST_RAW_STRING, max_width); case SPET_GOAL: case SPET_LOCATION: { @@ -779,7 +779,7 @@ public: } else { SetDParamStr(0, this->selected_generic_title); } - Dimension title_d = GetStringBoundingBox(STR_BLACK_RAW_STRING); + Dimension title_d = GetStringBoundingBox(STR_JUST_RAW_STRING); if (title_d.width > d.width) { d.width = title_d.width; @@ -970,7 +970,7 @@ static const NWidgetPart _nested_story_book_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_SB_PREV_PAGE), SetMinimalSize(100, 0), SetFill(0, 0), SetDataTip(STR_STORY_BOOK_PREV_PAGE, STR_STORY_BOOK_PREV_PAGE_TOOLTIP), NWidget(NWID_BUTTON_DROPDOWN, COLOUR_BROWN, WID_SB_SEL_PAGE), SetMinimalSize(93, 12), SetFill(1, 0), - SetDataTip(STR_BLACK_RAW_STRING, STR_STORY_BOOK_SEL_PAGE_TOOLTIP), SetResize(1, 0), + SetDataTip(STR_JUST_RAW_STRING, STR_STORY_BOOK_SEL_PAGE_TOOLTIP), SetResize(1, 0), NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_SB_NEXT_PAGE), SetMinimalSize(100, 0), SetFill(0, 0), SetDataTip(STR_STORY_BOOK_NEXT_PAGE, STR_STORY_BOOK_NEXT_PAGE_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_BROWN), EndContainer(), diff --git a/src/strings.cpp b/src/strings.cpp index ec17431ea3..666428c177 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2661,7 +2661,7 @@ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) LoadStringWidthTable(searcher->Monospace()); ReInitAllWindows(false); -#if !defined(WITH_ICU_LX) && !defined(WITH_UNISCRIBE) && !defined(WITH_COCOA) +#if !(defined(WITH_ICU_I18N) && defined(WITH_HARFBUZZ)) && !defined(WITH_UNISCRIBE) && !defined(WITH_COCOA) /* * For right-to-left languages we need the ICU library. If * we do not have support for that library we warn the user @@ -2676,10 +2676,10 @@ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) * the colour marker. */ if (_current_text_dir != TD_LTR) { - static std::string err_str("XXXThis version of OpenTTD does not support right-to-left languages. Recompile with icu enabled."); + static std::string err_str("XXXThis version of OpenTTD does not support right-to-left languages. Recompile with ICU + Harfbuzz enabled."); Utf8Encode(err_str.data(), SCC_YELLOW); SetDParamStr(0, err_str); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); } -#endif /* !WITH_ICU_LX */ +#endif /* !(WITH_ICU_I18N && WITH_HARFBUZZ) && !WITH_UNISCRIBE && !WITH_COCOA */ } diff --git a/src/table/settings/network_private_settings.ini b/src/table/settings/network_private_settings.ini index b2385d4cf6..ceb2a6935f 100644 --- a/src/table/settings/network_private_settings.ini +++ b/src/table/settings/network_private_settings.ini @@ -7,13 +7,19 @@ ; Network settings as stored in the private configuration file ("private.cfg"). [pre-amble] +static std::initializer_list _use_relay_service{"never", "ask", "allow"}; + static const SettingTable _network_private_settings = { [post-amble] }; [templates] -SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr), +SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr), +SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr), [validation] +SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); [defaults] flags = SF_NONE @@ -67,3 +73,22 @@ length = 0 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC def = """" cat = SC_EXPERT + +[SDTC_BOOL] +var = network.no_http_content_downloads +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = false +cat = SC_EXPERT + +[SDTC_OMANY] +var = network.use_relay_service +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = URS_ASK +min = URS_NO +max = URS_ALLOW +full = _use_relay_service +str = STR_CONFIG_SETTING_USE_RELAY_SERVICE +strhelp = STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT +strval = STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER +cat = SC_BASIC diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 2363f245f5..fd72fed6fa 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -10,7 +10,6 @@ static void UpdateClientConfigValues(); static std::initializer_list _server_game_type{"local", "public", "invite-only"}; -static std::initializer_list _use_relay_service{"never", "ask", "allow"}; static const SettingTable _network_settings = { [post-amble] @@ -257,22 +256,3 @@ var = network.reload_cfg flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY def = false cat = SC_EXPERT - -[SDTC_BOOL] -var = network.no_http_content_downloads -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC -def = false -cat = SC_EXPERT - -[SDTC_OMANY] -var = network.use_relay_service -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC -def = URS_ASK -min = URS_NO -max = URS_ALLOW -full = _use_relay_service -str = STR_CONFIG_SETTING_USE_RELAY_SERVICE -strhelp = STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT -strval = STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER -cat = SC_BASIC diff --git a/src/tbtr_template_gui_create.cpp b/src/tbtr_template_gui_create.cpp index 5bb45d2409..bd2212f067 100644 --- a/src/tbtr_template_gui_create.cpp +++ b/src/tbtr_template_gui_create.cpp @@ -293,7 +293,7 @@ public: DrawTrainImage(virtual_train, r.Shrink(TRAIN_FRONT_SPACE, 2, 25, 0), this->sel, EIT_IN_DEPOT, this->hscroll->GetPosition(), this->vehicle_over); SetDParam(0, CeilDiv(virtual_train->gcache.cached_total_length * 10, TILE_SIZE)); SetDParam(1, 1); - DrawString(r.left, r.right, r.top, STR_TINY_BLACK_DECIMAL, TC_BLACK, SA_RIGHT); + DrawString(r.left, r.right, r.top, STR_JUST_DECIMAL, TC_BLACK, SA_RIGHT, false, FS_SMALL); } break; } diff --git a/src/tbtr_template_gui_main.cpp b/src/tbtr_template_gui_main.cpp index df83dcfb3b..5cc31acfa9 100644 --- a/src/tbtr_template_gui_main.cpp +++ b/src/tbtr_template_gui_main.cpp @@ -711,7 +711,7 @@ public: /* Draw the template's length in tile-units */ SetDParam(0, v->GetRealLength()); SetDParam(1, 1); - DrawString(left, right - ScaleGUITrad(4), y + ScaleGUITrad(2), STR_TINY_BLACK_DECIMAL, TC_BLACK, SA_RIGHT); + DrawString(left, right - ScaleGUITrad(4), y + ScaleGUITrad(2), STR_JUST_DECIMAL, TC_BLACK, SA_RIGHT, false, FS_SMALL); int bottom_edge = y + this->bottom_matrix_item_size - FONT_HEIGHT_NORMAL - WidgetDimensions::scaled.framerect.bottom; @@ -728,7 +728,7 @@ public: /* Index of current template vehicle in the list of all templates for its company */ SetDParam(0, i); - DrawString(left + ScaleGUITrad(5), left + ScaleGUITrad(25), y + ScaleGUITrad(2), STR_BLACK_INT, TC_BLACK, SA_RIGHT); + DrawString(left + ScaleGUITrad(5), left + ScaleGUITrad(25), y + ScaleGUITrad(2), STR_JUST_INT, TC_BLACK, SA_RIGHT); /* Draw whether the current template is in use by any group */ if (v->NumGroupsUsingTemplate() > 0) { diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 6f565e52e2..55032ea670 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -1224,7 +1224,7 @@ static const NWidgetPart _nested_timetable_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_SCHEDULED_DISPATCH), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_SCHEDULED_DISPATCH, STR_TIMETABLE_SCHEDULED_DISPATCH_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_RESET_LATENESS), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_RESET_LATENESS, STR_TIMETABLE_RESET_LATENESS_TOOLTIP), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_EXPECTED_SELECTION), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_EXPECTED), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_BLACK_STRING, STR_TIMETABLE_EXPECTED_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_EXPECTED), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_JUST_STRING, STR_TIMETABLE_EXPECTED_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(), EndContainer(), EndContainer(), diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 6047c1cf93..81a312f1c1 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2474,7 +2474,7 @@ struct ScenarioEditorToolbarWindow : Window { case WID_TE_DATE: SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1)); - *size = GetStringBoundingBox(STR_WHITE_DATE_LONG); + *size = GetStringBoundingBox(STR_JUST_DATE_LONG); break; } } @@ -2640,7 +2640,7 @@ static const NWidgetPart _nested_toolb_scen_inner_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL), NWidget(NWID_HORIZONTAL), SetPIP(2, 2, 2), SetPadding(1), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), - NWidget(WWT_TEXT, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_WHITE_DATE_LONG, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE), SetAlignment(SA_CENTER), SetFill(0, 1), + NWidget(WWT_TEXT, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE), SetTextStyle(TC_WHITE), SetAlignment(SA_CENTER), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), EndContainer(), diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 9026da31f0..9b5d22c825 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -2644,7 +2644,7 @@ public: { switch (widget) { case TR_WIDGET_VALUE_INT: { - SetDParam(0, STR_BLACK_COMMA); + SetDParam(0, STR_JUST_COMMA); TraceRestrictItem item = this->GetSelected(); TraceRestrictValueType type = GetTraceRestrictTypeProperties(item).value_type; if (type == TRVT_TIME_DATE_INT && GetTraceRestrictValue(item) == TRTDVF_HOUR_MINUTE) { @@ -3163,7 +3163,7 @@ private: right_sel->SetDisplayedPlane(DPR_VALUE_DROPDOWN); this->EnableWidget(TR_WIDGET_VALUE_DROPDOWN); if (GetTraceRestrictAuxField(item) == TRPPAF_VALUE) { - this->GetWidget(TR_WIDGET_VALUE_DROPDOWN)->widget_data = STR_BLACK_COMMA; + this->GetWidget(TR_WIDGET_VALUE_DROPDOWN)->widget_data = STR_JUST_COMMA; } else { this->GetWidget(TR_WIDGET_VALUE_DROPDOWN)->widget_data = GetDropDownStringByValue(&_pf_penalty_dropdown, GetPathfinderPenaltyDropdownIndex(item)); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 299231ffb4..c5045697af 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1484,7 +1484,7 @@ static CommandCost CmdBuildRailWagon(TileIndex tile, DoCommandFlag flags, const v->date_of_last_service = _date; v->build_year = _cur_year; v->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); v->group_id = DEFAULT_GROUP; @@ -1559,7 +1559,7 @@ static void AddRearEngineToMultiheadedTrain(Train *v) u->date_of_last_service = v->date_of_last_service; u->build_year = v->build_year; u->sprite_seq.Set(SPR_IMG_QUERY); - u->random_bits = VehicleRandomBits(); + u->random_bits = Random(); v->SetMultiheaded(); u->SetMultiheaded(); if (v->IsVirtual()) u->SetVirtual(); @@ -1629,7 +1629,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engin v->date_of_last_service = _date; v->build_year = _cur_year; v->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SetBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE); v->SetServiceIntervalIsPercent(Company::Get(_current_company)->settings.vehicle.servint_ispercent); @@ -6959,7 +6959,7 @@ Train* CmdBuildVirtualRailWagon(const Engine *e, uint32 user, bool no_consist_ch v->build_year = _cur_year; v->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); v->group_id = DEFAULT_GROUP; @@ -7034,7 +7034,7 @@ Train* BuildVirtualRailVehicle(EngineID eid, StringID &error, uint32 user, bool v->build_year = _cur_year; v->sprite_seq.Set(SPR_IMG_QUERY); - v->random_bits = VehicleRandomBits(); + v->random_bits = Random(); v->group_id = DEFAULT_GROUP; diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 5be4b4acae..cdb43c8e97 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -214,11 +214,10 @@ static void TrainDetailsCargoTab(const CargoSummaryItem *item, int left, int rig SetDParam(3, _settings_game.vehicle.freight_trains); str = FreightWagonMult(item->cargo) > 1 ? STR_VEHICLE_DETAILS_CARGO_FROM_MULT : STR_VEHICLE_DETAILS_CARGO_FROM; } else { - SetDParam(0, STR_QUANTITY_N_A); - str = item->cargo == INVALID_CARGO ? STR_LTBLUE_STRING : STR_VEHICLE_DETAILS_CARGO_EMPTY; + str = item->cargo == INVALID_CARGO ? STR_QUANTITY_N_A : STR_VEHICLE_DETAILS_CARGO_EMPTY; } - DrawString(left, right, y, str); + DrawString(left, right, y, str, TC_LIGHT_BLUE); } /** diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 08228bcc01..f9d5d0be36 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -446,15 +446,6 @@ Vehicle::Vehicle(VehicleType type) this->vcache.cached_veh_flags = 0; } -/** - * Get a value for a vehicle's random_bits. - * @return A random value from 0 to 255. - */ -byte VehicleRandomBits() -{ - return GB(Random(), 0, 8); -} - /* Size of the hash, 6 = 64 x 64, 7 = 128 x 128. Larger sizes will (in theory) reduce hash * lookup times at the expense of memory usage. */ const int HASH_BITS = 7; diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 2f4755917b..dfa4616dc3 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -360,7 +360,7 @@ public: uint32 motion_counter; ///< counter to occasionally play a vehicle sound. (Also used as virtual train client ID). byte progress; ///< The percentage (if divided by 256) this vehicle already crossed the tile unit. - byte random_bits; ///< Bits used for determining which randomized variational spritegroups to use when drawing. + uint16 random_bits; ///< Bits used for randomized variational spritegroups. byte waiting_triggers; ///< Triggers to be yet matched before rerandomizing the random bits. StationID last_station_visited; ///< The last station we stopped at. diff --git a/src/vehicle_func.h b/src/vehicle_func.h index 2f8812d0e0..6c5664b1a8 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -122,7 +122,6 @@ uint8 CalcPercentVehicleFilledOfCargo(const Vehicle *v, CargoID cargo); void VehicleLengthChanged(const Vehicle *u); -byte VehicleRandomBits(); void ResetVehicleHash(); void ResetVehicleColourMap(); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index d01eac3688..e0588a2533 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -391,7 +391,7 @@ Dimension BaseVehicleListWindow::GetActionDropdownSize(bool show_autoreplace, bo void BaseVehicleListWindow::OnInit() { - this->order_arrow_width = GetStringBoundingBox(STR_TINY_RIGHT_ARROW).width; + this->order_arrow_width = GetStringBoundingBox(STR_JUST_RIGHT_ARROW, FS_SMALL).width; this->SetCargoFilterArray(); } @@ -1784,7 +1784,7 @@ static const NWidgetPart _nested_vehicle_list[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VL_HIDE_BUTTONS), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), SetFill(0, 1), - SetDataTip(STR_BLACK_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP), + SetDataTip(STR_JUST_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), SetFill(1, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetFill(0, 1), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP), @@ -1812,11 +1812,11 @@ static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, uin VehicleOrderID oid = start; do { - if (oid == v->cur_real_order_index) DrawString(left, right, y, STR_TINY_RIGHT_ARROW, TC_BLACK); + if (oid == v->cur_real_order_index) DrawString(left, right, y, STR_JUST_RIGHT_ARROW, TC_BLACK, SA_LEFT, false, FS_SMALL); if (order->IsType(OT_GOTO_STATION)) { SetDParam(0, order->GetDestination()); - DrawString(left + l_offset, right - r_offset, y, STR_TINY_BLACK_STATION); + DrawString(left + l_offset, right - r_offset, y, STR_STATION_NAME, TC_BLACK, SA_LEFT, false, FS_SMALL); y += FONT_HEIGHT_SMALL; if (++i == 4) break; @@ -1841,7 +1841,7 @@ static void DrawSmallOrderList(const Order *order, int left, int right, int y, u while (order != nullptr) { if (order->IsType(OT_GOTO_STATION)) { SetDParam(0, order->GetDestination()); - DrawString(left + l_offset, right - r_offset, y, STR_TINY_BLACK_STATION); + DrawString(left + l_offset, right - r_offset, y, STR_STATION_NAME, TC_BLACK, SA_LEFT, false, FS_SMALL); y += FONT_HEIGHT_SMALL; if (++i == 4) break; @@ -2060,44 +2060,44 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int if (!v->name.empty()) { /* The vehicle got a name so we will print it and the cargoes */ - SetDParam(0, STR_TINY_BLACK_VEHICLE); + SetDParam(0, STR_VEHICLE_NAME); SetDParam(1, v->index); SetDParam(2, STR_VEHICLE_LIST_CARGO); SetDParam(3, vehicle_cargoes); - DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_LIST_NAME_AND_CARGO); + DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_LIST_NAME_AND_CARGO, TC_BLACK, SA_LEFT, false, FS_SMALL); } else if (v->group_id != DEFAULT_GROUP) { /* The vehicle has no name, but is member of a group, so print group name and the cargoes */ - SetDParam(0, STR_TINY_GROUP); + SetDParam(0, STR_GROUP_NAME); SetDParam(1, v->group_id); SetDParam(2, STR_VEHICLE_LIST_CARGO); SetDParam(3, vehicle_cargoes); - DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_LIST_NAME_AND_CARGO); + DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_LIST_NAME_AND_CARGO, TC_BLACK, SA_LEFT, false, FS_SMALL); } else { /* The vehicle has no name, and is not a member of a group, so just print the cargoes */ SetDParam(0, vehicle_cargoes); - DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_LIST_CARGO); + DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_LIST_CARGO, TC_BLACK, SA_LEFT, false, FS_SMALL); } } else if (!v->name.empty()) { /* The vehicle got a name so we will print it */ SetDParam(0, v->index); - DrawString(tr.left, tr.right, ir.top, STR_TINY_BLACK_VEHICLE); + DrawString(tr.left, tr.right, ir.top, STR_VEHICLE_NAME, TC_BLACK, SA_LEFT, false, FS_SMALL); } else if (v->group_id != DEFAULT_GROUP) { /* The vehicle has no name, but is member of a group, so print group name */ SetDParam(0, v->group_id | GROUP_NAME_HIERARCHY); - DrawString(tr.left, tr.right, ir.top, STR_TINY_GROUP, TC_BLACK); + DrawString(tr.left, tr.right, ir.top, STR_GROUP_NAME, TC_BLACK, SA_LEFT, false, FS_SMALL); } if (show_orderlist) DrawSmallOrderList(v, olr.left, olr.right, ir.top, this->order_arrow_width, v->cur_real_order_index); - StringID str; + TextColour tc; if (v->IsChainInDepot()) { - str = STR_BLUE_COMMA; + tc = TC_BLUE; } else { - str = (v->age > v->max_age - DAYS_IN_LEAP_YEAR) ? STR_RED_COMMA : STR_BLACK_COMMA; + tc = (v->age > v->max_age - DAYS_IN_LEAP_YEAR) ? TC_RED : TC_BLACK; } SetDParam(0, v->unitnumber); - DrawString(ir.left, ir.right, ir.top + WidgetDimensions::scaled.framerect.top, str); + DrawString(ir.left, ir.right, ir.top + WidgetDimensions::scaled.framerect.top, STR_JUST_COMMA, tc); break; } @@ -2121,14 +2121,14 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int } if (show_group) { SetDParam(0, gid | GROUP_NAME_HIERARCHY); - DrawString(tr.left, tr.right, ir.top, STR_TINY_GROUP, TC_BLACK); + DrawString(tr.left, tr.right, ir.top, STR_GROUP_NAME, TC_BLACK, SA_LEFT, false, FS_SMALL); } } if (show_orderlist) DrawSmallOrderList((vehgroup.vehicles_begin[0])->GetFirstOrder(), olr.left, olr.right, ir.top, this->order_arrow_width); SetDParam(0, vehgroup.NumVehicles()); - DrawString(ir.left, ir.right, ir.top + WidgetDimensions::scaled.framerect.top, STR_BLACK_COMMA); + DrawString(ir.left, ir.right, ir.top + WidgetDimensions::scaled.framerect.top, STR_JUST_COMMA, TC_BLACK); break; default: diff --git a/src/widgets/build_vehicle_widget.h b/src/widgets/build_vehicle_widget.h index 1a09cb1345..20fd653a72 100644 --- a/src/widgets/build_vehicle_widget.h +++ b/src/widgets/build_vehicle_widget.h @@ -16,6 +16,7 @@ enum BuildVehicleWidgets { WID_BV_SORT_ASCENDING_DESCENDING, ///< Sort direction. WID_BV_SORT_DROPDOWN, ///< Criteria of sorting dropdown. WID_BV_CARGO_FILTER_DROPDOWN, ///< Cargo filter dropdown. + WID_BV_FILTER, ///< Filter by name. WID_BV_SHOW_HIDDEN_ENGINES, ///< Toggle whether to display the hidden vehicles. WID_BV_LIST, ///< List of vehicles. WID_BV_SCROLLBAR, ///< Scrollbar of list.