Merge branch 'master' into jgrpp

# Conflicts:
#	.github/workflows/ci-build.yml
#	.github/workflows/release-linux.yml
#	src/aircraft_cmd.cpp
#	src/airport_gui.cpp
#	src/articulated_vehicles.cpp
#	src/build_vehicle_gui.cpp
#	src/company_gui.cpp
#	src/genworld_gui.cpp
#	src/gfx_layout.cpp
#	src/misc_gui.cpp
#	src/newgrf.cpp
#	src/newgrf_config.h
#	src/newgrf_engine.cpp
#	src/news_gui.cpp
#	src/order_gui.cpp
#	src/roadveh_cmd.cpp
#	src/saveload/saveload.h
#	src/saveload/vehicle_sl.cpp
#	src/ship_cmd.cpp
#	src/statusbar_gui.cpp
#	src/table/settings/network_private_settings.ini
#	src/table/settings/network_settings.ini
#	src/toolbar_gui.cpp
#	src/train_cmd.cpp
#	src/vehicle_gui.cpp
pull/532/head
Jonathan G Rennison 11 months ago
commit 2ed248a61d

@ -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 \

@ -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

@ -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 \

@ -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)

@ -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

@ -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 \

@ -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)

@ -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
)

@ -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)

@ -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

@ -1,30 +1,20 @@
From 90dd4d4c6b1cedec338ff5b375fffca93700f7bc Mon Sep 17 00:00:00 2001
From 84d0e9112d5c87a714abd21ec8547921f46f37b5 Mon Sep 17 00:00:00 2001
From: milek7 <me@milek7.pl>
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

@ -1,4 +1,5 @@
add_subdirectory(fmt)
add_subdirectory(icu)
add_subdirectory(md5)
add_subdirectory(squirrel)
add_subdirectory(opengl)

@ -0,0 +1,5 @@
add_files(
scriptrun.cpp
scriptrun.h
CONDITION ICU_i18n_FOUND
)

@ -0,0 +1,46 @@
UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
See Terms of Use <https://www.unicode.org/copyright.html>
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.

@ -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 <unicode/utypes.h>
#include <unicode/uscript.h>
#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

@ -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 <unicode/utypes.h>
#include <unicode/uobject.h>
#include <unicode/uscript.h>
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<char *>(&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

@ -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

@ -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();

@ -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),

@ -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;

@ -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(),

@ -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<std::string> 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<NWidgetCore>(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(

@ -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);
}
}

@ -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;

@ -56,9 +56,12 @@
# include <ft2build.h>
# include FT_FREETYPE_H
#endif /* WITH_FREETYPE */
#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N)
#ifdef WITH_HARFBUZZ
# include <hb.h>
#endif /* WITH_HARFBUZZ */
#ifdef WITH_ICU_I18N
# include <unicode/uversion.h>
#endif /* WITH_ICU_LX || WITH_ICU_I18N */
#endif /* WITH_ICU_I18N */
#ifdef WITH_LIBLZMA
# include <lzma.h>
#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());

@ -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<uint>(unumber.height, this->flag_size.height);

@ -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;

@ -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),

@ -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");
}

@ -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(),

@ -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 <unicode/ustring.h>
#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<ICUVisualRun>, 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<const Line> NextLine(int max_width) override
{
icu::ParagraphLayout::Line *l = p->nextLine(max_width);
return std::unique_ptr<const Line>(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<FallbackVisualRun>, 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<const Line> 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<GlyphID>(this->glyph_count);
this->glyph_to_char = MallocT<int>(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<float>(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<const ParagraphLayouter::Line> 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<FallbackLine> 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<ICUParagraphLayoutFactory>(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<ICUParagraphLayoutFactory>(line, str, state);
if (line.layout == nullptr) {
state = old_state;
str = old_str;
}
state = old_state;
str = old_str;
}
#endif

@ -21,13 +21,6 @@
#include <type_traits>
#include <vector>
#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.

@ -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 <http://www.gnu.org/licenses/>.
*/
/** @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<FallbackVisualRun>, 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<const Line> 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<GlyphID>(this->glyph_count);
this->glyph_to_char = MallocT<int>(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<float>(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<const ParagraphLayouter::Line> 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<FallbackLine> 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;
}

@ -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 <http://www.gnu.org/licenses/>.
*/
/** @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 */

@ -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 <http://www.gnu.org/licenses/>.
*/
/** @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 <unicode/ubidi.h>
#include <unicode/brkiter.h>
#include <hb.h>
#include <hb-ft.h>
#include <deque>
#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<GlyphID> glyphs; ///< The glyphs of the run. Valid after Shape() is called.
std::vector<int> advance; ///< The advance (width) of the glyphs. Valid after Shape() is called.
std::vector<int> glyph_to_char; ///< The mapping from glyphs to characters. Valid after Shape() is called.
std::vector<float> 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<GlyphID> glyphs;
std::vector<float> positions;
std::vector<int> 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<ICUVisualRun>, 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<ICURun> runs;
UChar *buff;
size_t buff_length;
std::vector<ICURun>::iterator current_run;
int partial_offset;
public:
ICUParagraphLayout(std::vector<ICURun> &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<const Line> 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<const FT_Face *>(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<uint16 *>(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<ICURun> 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<ICURun>();
}
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<ICURun>();
}
std::vector<ICURun> 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<size_t>(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<size_t>(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<ICURun> ItemizeScript(UChar *buff, size_t length, std::vector<ICURun> &runs_current)
{
std::vector<ICURun> 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<ICURun> ItemizeStyle(UChar *buff, size_t length, std::vector<ICURun> &runs_current, FontMap &font_mapping)
{
std::vector<ICURun> 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<const ICUParagraphLayout::Line> ICUParagraphLayout::NextLine(int max_width)
{
std::vector<ICURun>::iterator start_run = this->current_run;
std::vector<ICURun>::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<UBiDiLevel> bidi_level;
for (auto run = start_run; run != last_run; run++) {
bidi_level.push_back(run->level);
}
std::vector<int32_t> vis_to_log(bidi_level.size());
ubidi_reorderVisual(bidi_level.data(), bidi_level.size(), vis_to_log.data());
/* Create line. */
std::unique_ptr<ICULine> 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;
}

@ -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 <http://www.gnu.org/licenses/>.
*/
/** @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 <unicode/ustring.h>
/**
* 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 */

@ -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),

@ -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<int64>(val, 0, needed) * this->bar_width / needed;

@ -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);

@ -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;
}

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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}

@ -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}

@ -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}

@ -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}

@ -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}

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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}

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save