Merge branch 'master' into jgrpp

# Conflicts:
#	src/cargotype.cpp
#	src/company_base.h
#	src/company_gui.cpp
#	src/core/pool_func.hpp
#	src/core/pool_type.hpp
#	src/graph_gui.cpp
#	src/industry_gui.cpp
#	src/ini_load.cpp
#	src/landscape.cpp
#	src/linkgraph/linkgraph_gui.cpp
#	src/network/core/packet.cpp
#	src/network/core/udp.cpp
#	src/newgrf.cpp
#	src/newgrf_gui.cpp
#	src/newgrf_station.cpp
#	src/order_base.h
#	src/order_cmd.cpp
#	src/order_gui.cpp
#	src/os/unix/unix.cpp
#	src/rail_gui.cpp
#	src/saveload/industry_sl.cpp
#	src/saveload/station_sl.cpp
#	src/screenshot.cpp
#	src/settings_gui.cpp
#	src/sl/oldloader_sl.cpp
#	src/station_cmd.cpp
#	src/station_gui.cpp
#	src/town.h
#	src/town_cmd.cpp
#	src/town_gui.cpp
#	src/vehicle_gui.cpp
#	src/viewport.cpp
#	src/viewport_sprite_sorter_sse4.cpp
#	src/waypoint_gui.cpp
pull/726/head
Jonathan G Rennison 2 months ago
commit f88568eba1

@ -62,7 +62,7 @@
c->ai_info = info; c->ai_info = info;
assert(c->ai_instance == nullptr); assert(c->ai_instance == nullptr);
c->ai_instance = new AIInstance(); c->ai_instance = std::make_unique<AIInstance>();
c->ai_instance->Initialize(info); c->ai_instance->Initialize(info);
c->ai_instance->LoadOnStack(config->GetToLoadData()); c->ai_instance->LoadOnStack(config->GetToLoadData());
config->SetToLoadData(nullptr); config->SetToLoadData(nullptr);
@ -115,8 +115,7 @@
Backup<CompanyID> cur_company(_current_company, company, FILE_LINE); Backup<CompanyID> cur_company(_current_company, company, FILE_LINE);
Company *c = Company::Get(company); Company *c = Company::Get(company);
delete c->ai_instance; c->ai_instance.reset();
c->ai_instance = nullptr;
c->ai_info = nullptr; c->ai_info = nullptr;
c->ai_config.reset(); c->ai_config.reset();

@ -137,7 +137,7 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height
Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator)
{ {
Blitter_32bppSimple::Pixel *dst; Blitter_32bppSimple::Pixel *dst;
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width * sizeof(*dst)); Sprite *dest_sprite = static_cast<Sprite *>(allocator(sizeof(*dest_sprite) + static_cast<size_t>(sprite[ZOOM_LVL_MIN].height) * static_cast<size_t>(sprite[ZOOM_LVL_MIN].width) * sizeof(*dst)));
dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
dest_sprite->width = sprite[ZOOM_LVL_MIN].width; dest_sprite->width = sprite[ZOOM_LVL_MIN].width;

@ -65,7 +65,7 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom
Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator)
{ {
Sprite *dest_sprite; Sprite *dest_sprite;
dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width); dest_sprite = static_cast<Sprite *>(allocator(sizeof(*dest_sprite) + static_cast<size_t>(sprite[ZOOM_LVL_MIN].height) * static_cast<size_t>(sprite[ZOOM_LVL_MIN].width)));
dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
dest_sprite->width = sprite[ZOOM_LVL_MIN].width; dest_sprite->width = sprite[ZOOM_LVL_MIN].width;

@ -62,7 +62,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets[] = {
NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BV_TOGGLE_DUAL_PANE_SEL), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BV_TOGGLE_DUAL_PANE_SEL),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BV_TOGGLE_DUAL_PANE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BV_TOGGLE_DUAL_PANE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE),
EndContainer(), EndContainer(),
NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
@ -104,7 +104,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BV_TOGGLE_DUAL_PANE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BV_TOGGLE_DUAL_PANE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUY_VEHICLE_TRAIN_TOGGLE_DUAL_PANE_TOOLTIP), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE),
NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY),

@ -17,6 +17,7 @@
#include "settings_type.h" #include "settings_type.h"
#include "group.h" #include "group.h"
#include <array> #include <array>
#include <numeric>
#include <string> #include <string>
static const Money COMPANY_MAX_LOAN_DEFAULT = INT64_MIN; static const Money COMPANY_MAX_LOAN_DEFAULT = INT64_MIN;
@ -31,9 +32,9 @@ struct CompanyEconomyEntry {
}; };
struct CompanyInfrastructure { struct CompanyInfrastructure {
std::array<uint32_t, RAILTYPE_END> rail{}; ///< Count of company owned track bits for each rail type.
std::array<uint32_t, ROADTYPE_END> road{}; ///< Count of company owned track bits for each road type. std::array<uint32_t, ROADTYPE_END> road{}; ///< Count of company owned track bits for each road type.
uint32_t signal{}; ///< Count of company owned signals. uint32_t signal{}; ///< Count of company owned signals.
std::array<uint32_t, RAILTYPE_END> rail{}; ///< Count of company owned track bits for each rail type.
uint32_t water{}; ///< Count of company owned track bits for canals. uint32_t water{}; ///< Count of company owned track bits for canals.
uint32_t station{}; ///< Count of company owned station tiles. uint32_t station{}; ///< Count of company owned station tiles.
uint32_t airport{}; ///< Count of company owned airports. uint32_t airport{}; ///< Count of company owned airports.
@ -41,9 +42,7 @@ struct CompanyInfrastructure {
/** Get total sum of all owned track bits. */ /** Get total sum of all owned track bits. */
uint32_t GetRailTotal() const uint32_t GetRailTotal() const
{ {
uint32_t total = 0; return std::accumulate(std::begin(this->rail), std::end(this->rail), 0U);
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) total += this->rail[rt];
return total;
} }
uint32_t GetRoadTotal() const; uint32_t GetRoadTotal() const;
@ -158,7 +157,7 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties {
RailTypes avail_railtypes; ///< Rail types available to this company. RailTypes avail_railtypes; ///< Rail types available to this company.
RoadTypes avail_roadtypes; ///< Road types available to this company. RoadTypes avail_roadtypes; ///< Road types available to this company.
class AIInstance *ai_instance; std::unique_ptr<class AIInstance> ai_instance;
class AIInfo *ai_info; class AIInfo *ai_info;
std::unique_ptr<class AIConfig> ai_config; std::unique_ptr<class AIConfig> ai_config;

@ -20,6 +20,7 @@
#include "network/network_base.h" #include "network/network_base.h"
#include "network/network_admin.h" #include "network/network_admin.h"
#include "ai/ai.hpp" #include "ai/ai.hpp"
#include "ai/ai_instance.hpp"
#include "ai/ai_config.hpp" #include "ai/ai_config.hpp"
#include "company_manager_face.h" #include "company_manager_face.h"
#include "window_func.h" #include "window_func.h"

@ -282,7 +282,7 @@ static constexpr NWidgetPart _nested_company_finances_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_CF_CAPTION), SetDataTip(STR_FINANCES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_CAPTION, COLOUR_GREY, WID_CF_CAPTION), SetDataTip(STR_FINANCES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_CF_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_CF_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE),
NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY),
EndContainer(), EndContainer(),
@ -1192,7 +1192,7 @@ static constexpr NWidgetPart _nested_select_company_manager_face_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_SCMF_CAPTION), SetDataTip(STR_FACE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_CAPTION, COLOUR_GREY, WID_SCMF_CAPTION), SetDataTip(STR_FACE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_FACE_ADVANCED_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_FACE_ADVANCED_TOOLTIP), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE),
EndContainer(), EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY, WID_SCMF_SELECT_FACE), NWidget(WWT_PANEL, COLOUR_GREY, WID_SCMF_SELECT_FACE),
NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPadding(2), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPadding(2),
@ -2455,16 +2455,15 @@ struct CompanyWindow : Window
{ {
int y = r.top; int y = r.top;
uint rail_pieces = c->infrastructure.signal; uint rail_pieces = c->infrastructure.signal + c->infrastructure.GetRailTotal();
for (uint32_t pieces : c->infrastructure.rail) rail_pieces += pieces;
if (rail_pieces != 0) { if (rail_pieces != 0) {
SetDParam(0, rail_pieces); SetDParam(0, rail_pieces);
DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL);
y += GetCharacterHeight(FS_NORMAL); y += GetCharacterHeight(FS_NORMAL);
} }
uint road_pieces = 0; /* GetRoadTotal() skips tram pieces, but we actually want road and tram here. */
for (uint32_t pieces : c->infrastructure.road) road_pieces += pieces; uint road_pieces = std::accumulate(std::begin(c->infrastructure.road), std::end(c->infrastructure.road), 0U);
if (road_pieces != 0) { if (road_pieces != 0) {
SetDParam(0, road_pieces); SetDParam(0, road_pieces);
DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD);

@ -147,11 +147,11 @@ struct IConsoleWindow : Window
void Scroll(int amount) void Scroll(int amount)
{ {
if (amount < 0) { if (amount < 0) {
size_t namount = (size_t) -amount; size_t namount = static_cast<size_t>(-amount);
IConsoleWindow::scroll = (namount > IConsoleWindow::scroll) ? 0 : IConsoleWindow::scroll - namount; IConsoleWindow::scroll = (namount > IConsoleWindow::scroll) ? 0 : IConsoleWindow::scroll - namount;
} else { } else {
assert(this->height >= 0 && this->line_height > 0); assert(this->height >= 0 && this->line_height > 0);
size_t visible_lines = (size_t)(this->height / this->line_height); size_t visible_lines = static_cast<size_t>(this->height / this->line_height);
size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines; size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines;
IConsoleWindow::scroll = std::min<size_t>(IConsoleWindow::scroll + amount, max_scroll); IConsoleWindow::scroll = std::min<size_t>(IConsoleWindow::scroll + amount, max_scroll);
} }
@ -192,7 +192,7 @@ struct IConsoleWindow : Window
if (this->truncate_timer.CountElapsed(delta_ms) == 0) return; if (this->truncate_timer.CountElapsed(delta_ms) == 0) return;
assert(this->height >= 0 && this->line_height > 0); assert(this->height >= 0 && this->line_height > 0);
size_t visible_lines = (size_t)(this->height / this->line_height); size_t visible_lines = static_cast<size_t>(this->height / this->line_height);
if (TruncateBuffer() && IConsoleWindow::scroll + visible_lines > _iconsole_buffer.size()) { if (TruncateBuffer() && IConsoleWindow::scroll + visible_lines > _iconsole_buffer.size()) {
size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines; size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines;

@ -117,17 +117,17 @@ DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index, Pool:
Titem *item; Titem *item;
if (Tcache && this->alloc_cache != nullptr) { if (Tcache && this->alloc_cache != nullptr) {
dbg_assert(sizeof(Titem) == size); dbg_assert(sizeof(Titem) == size);
item = (Titem *)this->alloc_cache; item = reinterpret_cast<Titem *>(this->alloc_cache);
this->alloc_cache = this->alloc_cache->next; this->alloc_cache = this->alloc_cache->next;
if (Tzero) { if (Tzero) {
/* Explicitly casting to (void *) prevents a clang warning - /* Explicitly casting to (void *) prevents a clang warning -
* we are actually memsetting a (not-yet-constructed) object */ * we are actually memsetting a (not-yet-constructed) object */
memset((void *)item, 0, sizeof(Titem)); memset(static_cast<void *>(item), 0, sizeof(Titem));
} }
} else if (Tzero) { } else if (Tzero) {
item = (Titem *)CallocT<uint8_t>(size); item = reinterpret_cast<Titem *>(CallocT<uint8_t>(size));
} else { } else {
item = (Titem *)MallocT<uint8_t>(size); item = reinterpret_cast<Titem *>(MallocT<uint8_t>(size));
} }
this->data[index] = Tops::PutPtr(item, param); this->data[index] = Tops::PutPtr(item, param);
SetBit(this->free_bitmap[index / 64], index % 64); SetBit(this->free_bitmap[index / 64], index % 64);
@ -192,7 +192,7 @@ DEFINE_POOL_METHOD(void)::FreeItem(size_t index)
dbg_assert(index < this->size); dbg_assert(index < this->size);
dbg_assert(this->data[index] != Tops::NullValue()); dbg_assert(this->data[index] != Tops::NullValue());
if (Tcache) { if (Tcache) {
AllocCache *ac = (AllocCache *)this->data[index]; AllocCache *ac = reinterpret_cast<AllocCache *>(this->data[index]);
ac->next = this->alloc_cache; ac->next = this->alloc_cache;
this->alloc_cache = ac; this->alloc_cache = ac;
} else { } else {

@ -95,8 +95,8 @@ struct Pool : PoolBase {
using ParamType = typename Tops::Tparam_type; using ParamType = typename Tops::Tparam_type;
using PtrType = typename Tops::Tptr; using PtrType = typename Tops::Tptr;
/* Ensure Tmax_size is within the bounds of Tindex. */ /* Ensure the highest possible index, i.e. Tmax_size -1, is within the bounds of Tindex. */
static_assert((uint64_t)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); static_assert(Tmax_size - 1 <= MAX_UVALUE(Tindex));
static constexpr size_t MAX_SIZE = Tmax_size; ///< Make template parameter accessible from outside static constexpr size_t MAX_SIZE = Tmax_size; ///< Make template parameter accessible from outside
@ -295,7 +295,7 @@ public:
inline void operator delete(void *p) inline void operator delete(void *p)
{ {
if (p == nullptr) return; if (p == nullptr) return;
Titem *pn = (Titem *)p; Titem *pn = static_cast<Titem *>(p);
dbg_assert_msg(pn == Tpool->Get(pn->index), "name: %s", Tpool->name); dbg_assert_msg(pn == Tpool->Get(pn->index), "name: %s", Tpool->name);
Tpool->FreeItem(pn->index); Tpool->FreeItem(pn->index);
} }

@ -48,11 +48,11 @@
static constexpr NWidgetPart _nested_train_depot_widgets[] = { static constexpr NWidgetPart _nested_train_depot_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), // rename button NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), // rename button
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP),
EndContainer(), EndContainer(),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_D_CAPTION), SetDataTip(STR_DEPOT_CAPTION, STR_NULL), NWidget(WWT_CAPTION, COLOUR_GREY, WID_D_CAPTION), SetDataTip(STR_DEPOT_CAPTION, STR_NULL),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_NULL), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_NULL),
NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY),
@ -77,9 +77,9 @@ static constexpr NWidgetPart _nested_train_depot_widgets[] = {
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_BUILD), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_BUILD), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_D_CLONE), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_D_CLONE), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_VEHICLE_LIST), SetDataTip(0x0, STR_NULL), SetFill(0, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_VEHICLE_LIST), SetDataTip(0x0, STR_NULL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_STOP_ALL), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_NULL), SetFill(0, 1), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_STOP_ALL), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_NULL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_START_ALL), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_NULL), SetFill(0, 1), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_START_ALL), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_NULL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1),
NWidget(WWT_RESIZEBOX, COLOUR_GREY), NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(), EndContainer(),
}; };

@ -213,10 +213,6 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc
buf = _searchpaths[sp] + _subdirs[subdir] + filename; buf = _searchpaths[sp] + _subdirs[subdir] + filename;
} }
#if defined(_WIN32)
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf).c_str()) == INVALID_FILE_ATTRIBUTES) return nullptr;
#endif
f = fopen(buf.c_str(), mode); f = fopen(buf.c_str(), mode);
#if !defined(_WIN32) #if !defined(_WIN32)
if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) {

@ -763,7 +763,7 @@ FiosNumberedSaveName::FiosNumberedSaveName(const std::string &prefix) : prefix(p
/* Get the save list. */ /* Get the save list. */
FileList list; FileList list;
FiosFileScanner scanner(SLO_SAVE, proc, list); FiosFileScanner scanner(SLO_SAVE, proc, list);
scanner.Scan(".sav", _autosave_path->c_str(), false); scanner.Scan(".sav", *_autosave_path, false);
/* Find the number for the most recent save, if any. */ /* Find the number for the most recent save, if any. */
if (list.begin() != list.end()) { if (list.begin() != list.end()) {

@ -97,7 +97,7 @@ static constexpr NWidgetPart _nested_load_dialog_widgets[] = {
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0),
EndContainer(), EndContainer(),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetAspect(1), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON),
EndContainer(), EndContainer(),
/* Files */ /* Files */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
@ -155,7 +155,7 @@ static constexpr NWidgetPart _nested_load_heightmap_dialog_widgets[] = {
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0),
EndContainer(), EndContainer(),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetAspect(1), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON),
EndContainer(), EndContainer(),
/* Files */ /* Files */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
@ -202,7 +202,7 @@ static constexpr NWidgetPart _nested_save_dialog_widgets[] = {
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0),
EndContainer(), EndContainer(),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetAspect(1), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON),
EndContainer(), EndContainer(),
/* Files */ /* Files */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),

@ -806,7 +806,7 @@ struct FrametimeGraphWindow : Window {
/* Determine horizontal scale based on period covered by 60 points /* Determine horizontal scale based on period covered by 60 points
* (slightly less than 2 seconds at full game speed) */ * (slightly less than 2 seconds at full game speed) */
struct ScaleDef { TimingMeasurement range; int scale; }; struct ScaleDef { TimingMeasurement range; int scale; };
static const ScaleDef hscales[] = { static const std::initializer_list<ScaleDef> hscales = {
{ TIMESTAMP_PRECISION * 120, 60 }, { TIMESTAMP_PRECISION * 120, 60 },
{ TIMESTAMP_PRECISION * 10, 20 }, { TIMESTAMP_PRECISION * 10, 20 },
{ TIMESTAMP_PRECISION * 5, 10 }, { TIMESTAMP_PRECISION * 5, 10 },
@ -821,7 +821,7 @@ struct FrametimeGraphWindow : Window {
void SelectVerticalScale(TimingMeasurement range) void SelectVerticalScale(TimingMeasurement range)
{ {
/* Determine vertical scale based on peak value (within the horizontal scale + a bit) */ /* Determine vertical scale based on peak value (within the horizontal scale + a bit) */
static const TimingMeasurement vscales[] = { static const std::initializer_list<TimingMeasurement> vscales = {
TIMESTAMP_PRECISION * 100, TIMESTAMP_PRECISION * 100,
TIMESTAMP_PRECISION * 10, TIMESTAMP_PRECISION * 10,
TIMESTAMP_PRECISION * 5, TIMESTAMP_PRECISION * 5,
@ -1044,7 +1044,7 @@ void ConPrintFramerate()
IConsolePrint(TC_SILVER, "Based on num. data points: {} {} {}", count1, count2, count3); IConsolePrint(TC_SILVER, "Based on num. data points: {} {} {}", count1, count2, count3);
static const char *MEASUREMENT_NAMES[PFE_MAX] = { static const std::array<std::string_view, PFE_MAX> MEASUREMENT_NAMES = {
"Game loop", "Game loop",
" GL station ticks", " GL station ticks",
" GL train ticks", " GL train ticks",
@ -1062,11 +1062,9 @@ void ConPrintFramerate()
}; };
std::string ai_name_buf; std::string ai_name_buf;
static const PerformanceElement rate_elements[] = { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO };
bool printed_anything = false; bool printed_anything = false;
for (const auto &e : rate_elements) { for (const auto &e : { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO }) {
auto &pf = _pf_data[e]; auto &pf = _pf_data[e];
if (pf.num_valid == 0) continue; if (pf.num_valid == 0) continue;
IConsolePrint(TC_GREEN, "{} rate: {:.2f}fps (expected: {:.2f}fps)", IConsolePrint(TC_GREEN, "{} rate: {:.2f}fps (expected: {:.2f}fps)",

@ -202,7 +202,7 @@ public:
/** /**
* Scan. * Scan.
*/ */
void Scan(const char *directory) void Scan(const std::string &directory)
{ {
this->FileScanner::Scan(".txt", directory, false); this->FileScanner::Scan(".txt", directory, false);
} }
@ -263,7 +263,7 @@ GameStrings *LoadTranslations()
} }
} else { } else {
/* Scan filesystem */ /* Scan filesystem */
scanner.Scan(ldir.c_str()); scanner.Scan(ldir);
} }
gs->Compile(); gs->Compile();

@ -140,15 +140,15 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = {
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR),
/* Snow coverage. */ /* Snow coverage. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
/* Desert coverage. */ /* Desert coverage. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
/* Snow line. */ /* Snow line. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
@ -167,9 +167,9 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = {
EndContainer(), EndContainer(),
/* Starting date. */ /* Starting date. */
NWidget(NWID_HORIZONTAL), 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_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1),
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), 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), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1),
@ -257,9 +257,9 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = {
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP), SetFill(1, 1),
/* Heightmap highest peak. */ /* Heightmap highest peak. */
NWidget(NWID_HORIZONTAL), 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_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP), SetFill(1, 1), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1),
EndContainer(), EndContainer(),
@ -288,15 +288,15 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = {
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR),
/* Snow coverage. */ /* Snow coverage. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
/* Desert coverage. */ /* Desert coverage. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
/* Snow line. */ /* Snow line. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
@ -315,9 +315,9 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = {
EndContainer(), EndContainer(),
/* Starting date. */ /* Starting date. */
NWidget(NWID_HORIZONTAL), 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_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1),
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), 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), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1),
@ -1450,16 +1450,16 @@ static constexpr NWidgetPart _nested_create_scenario_widgets[] = {
/* Date. */ /* Date. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
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_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP),
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), 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), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
/* Flat map height. */ /* Flat map height. */
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
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_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_INT, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_INT, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP),
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), 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), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
@ -1513,11 +1513,11 @@ static GenWorldStatus _gws;
static const StringID _generation_class_table[] = { static const StringID _generation_class_table[] = {
STR_GENERATION_WORLD_GENERATION, STR_GENERATION_WORLD_GENERATION,
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION, STR_GENERATION_LANDSCAPE_GENERATION,
STR_GENERATION_RIVER_GENERATION, STR_GENERATION_RIVER_GENERATION,
STR_GENERATION_CLEARING_TILES, STR_GENERATION_CLEARING_TILES,
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION, STR_GENERATION_TOWN_GENERATION,
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION, STR_GENERATION_INDUSTRY_GENERATION,
STR_GENERATION_OBJECT_GENERATION, STR_GENERATION_OBJECT_GENERATION,
STR_GENERATION_TREE_GENERATION, STR_GENERATION_TREE_GENERATION,
STR_GENERATION_PUBLIC_ROADS_GENERATION, STR_GENERATION_PUBLIC_ROADS_GENERATION,

@ -263,17 +263,17 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const
const auto &charmap = run.GetGlyphToCharMap(); const auto &charmap = run.GetGlyphToCharMap();
/* Run starts after our character, use the last found position. */ /* Run starts after our character, use the last found position. */
if ((size_t)charmap.front() > index) return *position; if (static_cast<size_t>(charmap.front()) > index) return *position;
position = positions.data(); position = positions.data();
for (auto it = charmap.begin(); it != charmap.end(); /* nothing */) { for (auto it = charmap.begin(); it != charmap.end(); /* nothing */) {
/* Plain honest-to-$deity match. */ /* Plain honest-to-$deity match. */
if ((size_t)*it == index) return *position; if (static_cast<size_t>(*it) == index) return *position;
++it; ++it;
if (it == charmap.end()) break; if (it == charmap.end()) break;
/* We just passed our character, it's probably a ligature, use the last found position. */ /* We just passed our character, it's probably a ligature, use the last found position. */
if ((size_t)*it > index) return *position; if (static_cast<size_t>(*it) > index) return *position;
++position; ++position;
} }
} }

@ -218,7 +218,7 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
*/ */
if (this->buffer == nullptr) return nullptr; if (this->buffer == nullptr) return nullptr;
std::unique_ptr<FallbackLine> l(new FallbackLine()); std::unique_ptr<FallbackLine> l = std::make_unique<FallbackLine>();
if (*this->buffer == '\0') { if (*this->buffer == '\0') {
/* Only a newline. */ /* Only a newline. */

@ -489,7 +489,7 @@ std::unique_ptr<const ICUParagraphLayout::Line> ICUParagraphLayout::NextLine(int
ubidi_reorderVisual(bidi_level.data(), bidi_level.size(), vis_to_log.data()); ubidi_reorderVisual(bidi_level.data(), bidi_level.size(), vis_to_log.data());
/* Create line. */ /* Create line. */
std::unique_ptr<ICULine> line(new ICULine()); std::unique_ptr<ICULine> line = std::make_unique<ICULine>();
int cur_pos = 0; int cur_pos = 0;
for (auto &i : vis_to_log) { for (auto &i : vis_to_log) {

@ -1440,7 +1440,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
ToggleBit(_legend_excluded_cargo, (*it)->Index()); ToggleBit(_legend_excluded_cargo, (*it)->Index());
this->UpdateExcludedData(); this->UpdateExcludedData();
this->UpdateCargoExcludingGraphs(); this->UpdateCargoExcludingGraphs();
break;
} }
break; break;
} }

@ -107,9 +107,9 @@ static constexpr NWidgetPart _nested_group_widgets[] = {
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), EndContainer(), 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), 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), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetMinimalSize(12, 12), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG),
SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetMinimalSize(12, 12), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG),
SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP),
NWidget(WWT_RESIZEBOX, COLOUR_GREY), NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(), EndContainer(),

@ -102,7 +102,7 @@ static uint16_t ParseCode(const char *start, const char *end)
assert(start <= end); assert(start <= end);
while (start < end && *start == ' ') start++; while (start < end && *start == ' ') start++;
while (end > start && *end == ' ') end--; while (end > start && *end == ' ') end--;
std::string_view str{start, (size_t)(end - start)}; std::string_view str{start, static_cast<size_t>(end - start)};
for (const auto &kn : _keycode_to_name) { for (const auto &kn : _keycode_to_name) {
if (StrEqualsIgnoreCase(str, kn.name)) { if (StrEqualsIgnoreCase(str, kn.name)) {
return kn.keycode; return kn.keycode;

@ -30,6 +30,7 @@ static const HouseID NUM_HOUSES = 1024; ///< Total number of houses.
static const HouseID INVALID_HOUSE_ID = 0xFFFF; static const HouseID INVALID_HOUSE_ID = 0xFFFF;
static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile
static const uint HOUSE_ORIGINAL_NUM_ACCEPTS = 3; ///< Original number of accepted cargo types.
enum BuildingFlags { enum BuildingFlags {
TILE_NO_FLAG = 0, TILE_NO_FLAG = 0,

@ -437,7 +437,7 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca
uint16_t res = GetIndustryTileCallback(CBID_INDTILE_ACCEPT_CARGO, 0, 0, gfx, Industry::GetByTile(tile), tile); uint16_t res = GetIndustryTileCallback(CBID_INDTILE_ACCEPT_CARGO, 0, 0, gfx, Industry::GetByTile(tile), tile);
if (res != CALLBACK_FAILED) { if (res != CALLBACK_FAILED) {
accepts_cargo.fill(INVALID_CARGO); accepts_cargo.fill(INVALID_CARGO);
for (uint i = 0; i < 3; i++) accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile); for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile);
} }
} }
@ -446,7 +446,7 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca
uint16_t res = GetIndustryTileCallback(CBID_INDTILE_CARGO_ACCEPTANCE, 0, 0, gfx, Industry::GetByTile(tile), tile); uint16_t res = GetIndustryTileCallback(CBID_INDTILE_CARGO_ACCEPTANCE, 0, 0, gfx, Industry::GetByTile(tile), tile);
if (res != CALLBACK_FAILED) { if (res != CALLBACK_FAILED) {
cargo_acceptance.fill(0); cargo_acceptance.fill(0);
for (uint i = 0; i < 3; i++) cargo_acceptance[i] = GB(res, i * 4, 4); for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) cargo_acceptance[i] = GB(res, i * 4, 4);
} }
} }
@ -1745,7 +1745,7 @@ static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int t
/* On a large map with many industries, it may be faster to check an area. */ /* On a large map with many industries, it may be faster to check an area. */
static const int dmax = 14; static const int dmax = 14;
if (Industry::GetNumItems() > (size_t) (dmax * dmax * 2)) { if (Industry::GetNumItems() > static_cast<size_t>(dmax * dmax * 2)) {
const Industry *i = nullptr; const Industry *i = nullptr;
TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax); TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax);
for (TileIndex atile : tile_area) { for (TileIndex atile : tile_area) {

@ -196,10 +196,12 @@ static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixTy
} }
switch (use_input) { switch (use_input) {
case CARGOSUFFIX_OUT: case CARGOSUFFIX_OUT:
// Handle INDUSTRY_ORIGINAL_NUM_OUTPUTS cargoes
if (cargoes[0] != INVALID_CARGO) GetCargoSuffix(3, cst, ind, ind_type, indspec, suffixes[0]); if (cargoes[0] != INVALID_CARGO) GetCargoSuffix(3, cst, ind, ind_type, indspec, suffixes[0]);
if (cargoes[1] != INVALID_CARGO) GetCargoSuffix(4, cst, ind, ind_type, indspec, suffixes[1]); if (cargoes[1] != INVALID_CARGO) GetCargoSuffix(4, cst, ind, ind_type, indspec, suffixes[1]);
break; break;
case CARGOSUFFIX_IN: case CARGOSUFFIX_IN:
// Handle INDUSTRY_ORIGINAL_NUM_INPUTS cargoes
if (cargoes[0] != INVALID_CARGO) GetCargoSuffix(0, cst, ind, ind_type, indspec, suffixes[0]); if (cargoes[0] != INVALID_CARGO) GetCargoSuffix(0, cst, ind, ind_type, indspec, suffixes[0]);
if (cargoes[1] != INVALID_CARGO) GetCargoSuffix(1, cst, ind, ind_type, indspec, suffixes[1]); if (cargoes[1] != INVALID_CARGO) GetCargoSuffix(1, cst, ind, ind_type, indspec, suffixes[1]);
if (cargoes[2] != INVALID_CARGO) GetCargoSuffix(2, cst, ind, ind_type, indspec, suffixes[2]); if (cargoes[2] != INVALID_CARGO) GetCargoSuffix(2, cst, ind, ind_type, indspec, suffixes[2]);
@ -231,9 +233,9 @@ void GetCargoSuffix(CargoSuffixInOut use_input, CargoSuffixType cst, const Indus
uint cargotype = local_id << 16 | use_input; uint cargotype = local_id << 16 | use_input;
GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffix); GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffix);
} else if (use_input == CARGOSUFFIX_IN) { } else if (use_input == CARGOSUFFIX_IN) {
if (slot < 3) GetCargoSuffix(slot, cst, ind, ind_type, indspec, suffix); if (slot < INDUSTRY_ORIGINAL_NUM_INPUTS) GetCargoSuffix(slot, cst, ind, ind_type, indspec, suffix);
} else if (use_input == CARGOSUFFIX_OUT) { } else if (use_input == CARGOSUFFIX_OUT) {
if (slot < 2) GetCargoSuffix(slot + 3, cst, ind, ind_type, indspec, suffix); if (slot < INDUSTRY_ORIGINAL_NUM_OUTPUTS) GetCargoSuffix(slot + INDUSTRY_ORIGINAL_NUM_INPUTS, cst, ind, ind_type, indspec, suffix);
} }
} }
@ -1252,7 +1254,7 @@ static constexpr NWidgetPart _nested_industry_view_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_CREAM), NWidget(WWT_CLOSEBOX, COLOUR_CREAM),
NWidget(WWT_CAPTION, COLOUR_CREAM, WID_IV_CAPTION), SetDataTip(STR_INDUSTRY_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_CAPTION, COLOUR_CREAM, WID_IV_CAPTION), SetDataTip(STR_INDUSTRY_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHIMGBTN, COLOUR_CREAM, WID_IV_GOTO), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_INDUSTRY_VIEW_LOCATION_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_CREAM, WID_IV_GOTO), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_INDUSTRY_VIEW_LOCATION_TOOLTIP),
NWidget(WWT_DEBUGBOX, COLOUR_CREAM), NWidget(WWT_DEBUGBOX, COLOUR_CREAM),
NWidget(WWT_SHADEBOX, COLOUR_CREAM), NWidget(WWT_SHADEBOX, COLOUR_CREAM),
NWidget(WWT_DEFSIZEBOX, COLOUR_CREAM), NWidget(WWT_DEFSIZEBOX, COLOUR_CREAM),
@ -2447,8 +2449,8 @@ private:
} }
}; };
static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); static_assert(MAX_CARGOES >= std::tuple_size_v<decltype(IndustrySpec::produced_cargo)>);
static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); static_assert(MAX_CARGOES >= std::tuple_size_v<decltype(IndustrySpec::accepts_cargo)>);
Dimension CargoesField::legend; ///< Dimension of the legend blob. Dimension CargoesField::legend; ///< Dimension of the legend blob.
Dimension CargoesField::cargo_border; ///< Dimensions of border between cargo lines and industry boxes. Dimension CargoesField::cargo_border; ///< Dimensions of border between cargo lines and industry boxes.

@ -37,6 +37,8 @@ static const int INDUSTRY_COMPLETED = 3; ///< final stage of industry constructi
static const int INDUSTRY_NUM_INPUTS = 16; ///< Number of cargo types an industry can accept static const int INDUSTRY_NUM_INPUTS = 16; ///< Number of cargo types an industry can accept
static const int INDUSTRY_NUM_OUTPUTS = 16; ///< Number of cargo types an industry can produce static const int INDUSTRY_NUM_OUTPUTS = 16; ///< Number of cargo types an industry can produce
static const int INDUSTRY_ORIGINAL_NUM_INPUTS = 3; ///< Original number of accepted cargo types.
static const int INDUSTRY_ORIGINAL_NUM_OUTPUTS = 2; ///< Original number of produced cargo types.
void CheckIndustries(); void CheckIndustries();

@ -20,7 +20,7 @@
* @param parent the group we belong to * @param parent the group we belong to
* @param name the name of the item * @param name the name of the item
*/ */
IniItem::IniItem(const std::string &name) IniItem::IniItem(std::string_view name)
{ {
this->name = StrMakeValid(name); this->name = StrMakeValid(name);
} }
@ -29,7 +29,7 @@ IniItem::IniItem(const std::string &name)
* Replace the current value with another value. * Replace the current value with another value.
* @param value the value to replace with. * @param value the value to replace with.
*/ */
void IniItem::SetValue(const std::string_view value) void IniItem::SetValue(std::string_view value)
{ {
this->value.emplace(value); this->value.emplace(value);
} }
@ -39,7 +39,7 @@ void IniItem::SetValue(const std::string_view value)
* @param parent the file we belong to * @param parent the file we belong to
* @param name the name of the group * @param name the name of the group
*/ */
IniGroup::IniGroup(const std::string &name, IniGroupType type) : type(type), comment("\n") IniGroup::IniGroup(std::string_view name, IniGroupType type) : type(type), comment("\n")
{ {
this->name = StrMakeValid(name); this->name = StrMakeValid(name);
} }
@ -49,7 +49,7 @@ IniGroup::IniGroup(const std::string &name, IniGroupType type) : type(type), com
* @param name name of the item to find. * @param name name of the item to find.
* @return the requested item or nullptr if not found. * @return the requested item or nullptr if not found.
*/ */
const IniItem *IniGroup::GetItem(const std::string &name) const const IniItem *IniGroup::GetItem(std::string_view name) const
{ {
for (const IniItem &item : this->items) { for (const IniItem &item : this->items) {
if (item.name == name) return &item; if (item.name == name) return &item;
@ -63,7 +63,7 @@ const IniItem *IniGroup::GetItem(const std::string &name) const
* @param name name of the item to find. * @param name name of the item to find.
* @return the requested item. * @return the requested item.
*/ */
IniItem &IniGroup::GetOrCreateItem(const std::string &name) IniItem &IniGroup::GetOrCreateItem(std::string_view name)
{ {
for (IniItem &item : this->items) { for (IniItem &item : this->items) {
if (item.name == name) return item; if (item.name == name) return item;
@ -78,7 +78,7 @@ IniItem &IniGroup::GetOrCreateItem(const std::string &name)
* @param name name of the item to create. * @param name name of the item to create.
* @return the created item. * @return the created item.
*/ */
IniItem &IniGroup::CreateItem(const std::string &name) IniItem &IniGroup::CreateItem(std::string_view name)
{ {
return this->items.emplace_back(name); return this->items.emplace_back(name);
} }
@ -87,7 +87,7 @@ IniItem &IniGroup::CreateItem(const std::string &name)
* Remove the item with the given name. * Remove the item with the given name.
* @param name Name of the item to remove. * @param name Name of the item to remove.
*/ */
void IniGroup::RemoveItem(const std::string &name) void IniGroup::RemoveItem(std::string_view name)
{ {
this->items.remove_if([&name](const IniItem &item) { return item.name == name; }); this->items.remove_if([&name](const IniItem &item) { return item.name == name; });
} }
@ -116,7 +116,7 @@ IniLoadFile::IniLoadFile(const IniGroupNameList &list_group_names, const IniGrou
* @param name name of the group to find. * @param name name of the group to find.
* @return The requested group or \c nullptr if not found. * @return The requested group or \c nullptr if not found.
*/ */
const IniGroup *IniLoadFile::GetGroup(const std::string &name) const const IniGroup *IniLoadFile::GetGroup(std::string_view name) const
{ {
for (const IniGroup &group : this->groups) { for (const IniGroup &group : this->groups) {
if (group.name == name) return &group; if (group.name == name) return &group;
@ -130,7 +130,7 @@ const IniGroup *IniLoadFile::GetGroup(const std::string &name) const
* @param name name of the group to find. * @param name name of the group to find.
* @return The requested group or \c nullptr if not found. * @return The requested group or \c nullptr if not found.
*/ */
IniGroup *IniLoadFile::GetGroup(const std::string &name) IniGroup *IniLoadFile::GetGroup(std::string_view name)
{ {
for (IniGroup &group : this->groups) { for (IniGroup &group : this->groups) {
if (group.name == name) return &group; if (group.name == name) return &group;
@ -144,7 +144,7 @@ IniGroup *IniLoadFile::GetGroup(const std::string &name)
* @param name name of the group to find. * @param name name of the group to find.
* @return the requested group. * @return the requested group.
*/ */
IniGroup &IniLoadFile::GetOrCreateGroup(const std::string &name) IniGroup &IniLoadFile::GetOrCreateGroup(std::string_view name)
{ {
for (IniGroup &group : this->groups) { for (IniGroup &group : this->groups) {
if (group.name == name) return group; if (group.name == name) return group;
@ -159,7 +159,7 @@ IniGroup &IniLoadFile::GetOrCreateGroup(const std::string &name)
* @param name name of the group to create. * @param name name of the group to create.
* @return the created group. * @return the created group.
*/ */
IniGroup &IniLoadFile::CreateGroup(const std::string &name) IniGroup &IniLoadFile::CreateGroup(std::string_view name)
{ {
IniGroupType type = IGT_VARIABLES; IniGroupType type = IGT_VARIABLES;
if (std::find(this->list_group_names.begin(), this->list_group_names.end(), name) != this->list_group_names.end()) type = IGT_LIST; if (std::find(this->list_group_names.begin(), this->list_group_names.end(), name) != this->list_group_names.end()) type = IGT_LIST;
@ -172,7 +172,7 @@ IniGroup &IniLoadFile::CreateGroup(const std::string &name)
* Remove the group with the given name. * Remove the group with the given name.
* @param name name of the group to remove. * @param name name of the group to remove.
*/ */
void IniLoadFile::RemoveGroup(const std::string &name) void IniLoadFile::RemoveGroup(std::string_view name)
{ {
size_t len = name.length(); size_t len = name.length();
this->groups.remove_if([&name, &len](const IniGroup &group) { return group.name.compare(0, len, name) == 0; }); this->groups.remove_if([&name, &len](const IniGroup &group) { return group.name.compare(0, len, name) == 0; });
@ -207,7 +207,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
end += ftell(in); end += ftell(in);
/* for each line in the file */ /* for each line in the file */
while ((size_t)ftell(in) < end && fgets(buffer, sizeof(buffer), in)) { while (static_cast<size_t>(ftell(in)) < end && fgets(buffer, sizeof(buffer), in)) {
if (save != nullptr) *save += buffer; if (save != nullptr) *save += buffer;
char c, *s; char c, *s;
/* trim whitespace from the left side */ /* trim whitespace from the left side */
@ -243,7 +243,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
e--; e--;
} }
s++; // skip [ s++; // skip [
group = &this->CreateGroup(std::string(s, e - s)); group = &this->CreateGroup(std::string_view(s, e - s));
if (comment_size != 0) { if (comment_size != 0) {
group->comment.assign(comment, comment_size); group->comment.assign(comment, comment_size);
comment_size = 0; comment_size = 0;
@ -251,7 +251,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
} else if (group != nullptr) { } else if (group != nullptr) {
if (group->type == IGT_SEQUENCE) { if (group->type == IGT_SEQUENCE) {
/* A sequence group, use the line as item name without further interpretation. */ /* A sequence group, use the line as item name without further interpretation. */
IniItem &item = group->CreateItem(std::string(buffer, e - buffer)); IniItem &item = group->CreateItem(std::string_view(buffer, e - buffer));
if (comment_size) { if (comment_size) {
item.comment.assign(comment, comment_size); item.comment.assign(comment, comment_size);
comment_size = 0; comment_size = 0;
@ -269,7 +269,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
} }
/* it's an item in an existing group */ /* it's an item in an existing group */
IniItem &item = group->CreateItem(std::string(s, t - s)); IniItem &item = group->CreateItem(std::string_view(s, t - s));
if (comment_size != 0) { if (comment_size != 0) {
item.comment.assign(comment, comment_size); item.comment.assign(comment, comment_size);
comment_size = 0; comment_size = 0;

@ -28,9 +28,9 @@ struct IniItem {
std::optional<std::string> value; ///< The value of this item std::optional<std::string> value; ///< The value of this item
std::string comment; ///< The comment associated with this item std::string comment; ///< The comment associated with this item
IniItem(const std::string &name); IniItem(std::string_view name);
void SetValue(const std::string_view value); void SetValue(std::string_view value);
}; };
/** A group within an ini file. */ /** A group within an ini file. */
@ -40,12 +40,12 @@ struct IniGroup {
std::string name; ///< name of group std::string name; ///< name of group
std::string comment; ///< comment for group std::string comment; ///< comment for group
IniGroup(const std::string &name, IniGroupType type); IniGroup(std::string_view name, IniGroupType type);
const IniItem *GetItem(const std::string &name) const; const IniItem *GetItem(std::string_view name) const;
IniItem &GetOrCreateItem(const std::string &name); IniItem &GetOrCreateItem(std::string_view name);
IniItem &CreateItem(const std::string &name); IniItem &CreateItem(std::string_view name);
void RemoveItem(const std::string &name); void RemoveItem(std::string_view name);
void Clear(); void Clear();
}; };
@ -61,11 +61,11 @@ struct IniLoadFile {
IniLoadFile(const IniGroupNameList &list_group_names = {}, const IniGroupNameList &seq_group_names = {}); IniLoadFile(const IniGroupNameList &list_group_names = {}, const IniGroupNameList &seq_group_names = {});
virtual ~IniLoadFile() { } virtual ~IniLoadFile() { }
const IniGroup *GetGroup(const std::string &name) const; const IniGroup *GetGroup(std::string_view name) const;
IniGroup *GetGroup(const std::string &name); IniGroup *GetGroup(std::string_view name);
IniGroup &GetOrCreateGroup(const std::string &name); IniGroup &GetOrCreateGroup(std::string_view name);
IniGroup &CreateGroup(const std::string &name); IniGroup &CreateGroup(std::string_view name);
void RemoveGroup(const std::string &name); void RemoveGroup(std::string_view name);
void LoadFromDisk(const std::string &filename, Subdirectory subdir, std::string *save = nullptr); void LoadFromDisk(const std::string &filename, Subdirectory subdir, std::string *save = nullptr);

@ -184,7 +184,7 @@ struct SelectGameWindow : public Window {
this->ReadIntroGameViewportCommands(); this->ReadIntroGameViewportCommands();
this->cur_viewport_command_index = (size_t)-1; this->cur_viewport_command_index = SIZE_MAX;
this->cur_viewport_command_time = 0; this->cur_viewport_command_time = 0;
this->mouse_idle_time = 0; this->mouse_idle_time = 0;
this->mouse_idle_pos = _cursor.pos; this->mouse_idle_pos = _cursor.pos;

@ -975,23 +975,23 @@ static std::pair<const Rect16 *, const Rect16 *> GetDesertOrRainforestData()
} }
template <typename F> template <typename F>
void DesertOrRainforestProcessTiles(const std::pair<const Rect16 *, const Rect16 *> desert_rainforest_data, const Rect16 *&data, TileIndex tile, F handle_tile) bool DesertOrRainforestProcessTiles(const std::pair<const Rect16 *, const Rect16 *> desert_rainforest_data, TileIndex tile, F handle_tile)
{ {
for (data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) { for (const Rect16 *data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) {
const Rect16 r = *data; const Rect16 r = *data;
for (int16_t x = r.left; x <= r.right; x++) { for (int16_t x = r.left; x <= r.right; x++) {
for (int16_t y = r.top; y <= r.bottom; y++) { for (int16_t y = r.top; y <= r.bottom; y++) {
TileIndex t = AddTileIndexDiffCWrap(tile, { x, y }); TileIndex t = AddTileIndexDiffCWrap(tile, { x, y });
if (handle_tile(t)) return; if (handle_tile(t)) return false;
} }
} }
} }
return true;
} }
static void CreateDesertOrRainForest(uint desert_tropic_line) static void CreateDesertOrRainForest(uint desert_tropic_line)
{ {
TileIndex update_freq = MapSize() / 4; uint update_freq = MapSize() / 4;
const Rect16 *data;
const std::pair<const Rect16 *, const Rect16 *> desert_rainforest_data = GetDesertOrRainforestData(); const std::pair<const Rect16 *, const Rect16 *> desert_rainforest_data = GetDesertOrRainforestData();
@ -1000,10 +1000,10 @@ static void CreateDesertOrRainForest(uint desert_tropic_line)
if (!IsValidTile(tile)) continue; if (!IsValidTile(tile)) continue;
DesertOrRainforestProcessTiles(desert_rainforest_data, data, tile, [&](TileIndex t) -> bool { bool ok = DesertOrRainforestProcessTiles(desert_rainforest_data, tile, [&](TileIndex t) -> bool {
return (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))); return (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER)));
}); });
if (data == desert_rainforest_data.second) { if (ok) {
SetTropicZone(tile, TROPICZONE_DESERT); SetTropicZone(tile, TROPICZONE_DESERT);
} }
} }
@ -1019,10 +1019,10 @@ static void CreateDesertOrRainForest(uint desert_tropic_line)
if (!IsValidTile(tile)) continue; if (!IsValidTile(tile)) continue;
DesertOrRainforestProcessTiles(desert_rainforest_data, data, tile, [&](TileIndex t) -> bool { bool ok = DesertOrRainforestProcessTiles(desert_rainforest_data, tile, [&](TileIndex t) -> bool {
return (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)); return (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT));
}); });
if (data == desert_rainforest_data.second) { if (ok) {
SetTropicZone(tile, TROPICZONE_RAINFOREST); SetTropicZone(tile, TROPICZONE_RAINFOREST);
} }
} }

@ -2912,9 +2912,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Wêreld generasie STR_GENERATION_WORLD_GENERATION :{BLACK}Wêreld generasie
STR_GENERATION_RIVER_GENERATION :{BLACK}Rivier generasie STR_GENERATION_RIVER_GENERATION :{BLACK}Rivier generasie
STR_GENERATION_TREE_GENERATION :{BLACK}Boom generasie
STR_GENERATION_OBJECT_GENERATION :{BLACK}Onbeweegbaar generasie
STR_GENERATION_CLEARING_TILES :{BLACK}Ru en rotserig area generasie STR_GENERATION_CLEARING_TILES :{BLACK}Ru en rotserig area generasie
STR_GENERATION_OBJECT_GENERATION :{BLACK}Onbeweegbaar generasie
STR_GENERATION_TREE_GENERATION :{BLACK}Boom generasie
STR_GENERATION_SETTINGUP_GAME :{BLACK}Stel speletjie op STR_GENERATION_SETTINGUP_GAME :{BLACK}Stel speletjie op
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Hardloop teël-herhaling STR_GENERATION_PREPARING_TILELOOP :{BLACK}Hardloop teël-herhaling
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lopende skrif STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lopende skrif

@ -2773,9 +2773,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK} مولد الخريطة STR_GENERATION_WORLD_GENERATION :{BLACK} مولد الخريطة
STR_GENERATION_RIVER_GENERATION :{BLACK}مولد الانهار STR_GENERATION_RIVER_GENERATION :{BLACK}مولد الانهار
STR_GENERATION_TREE_GENERATION :{BLACK} مولد الشجر
STR_GENERATION_OBJECT_GENERATION :{BLACK}صانع الخامات
STR_GENERATION_CLEARING_TILES :{BLACK}مولد المناطق الخشنة والصخرية STR_GENERATION_CLEARING_TILES :{BLACK}مولد المناطق الخشنة والصخرية
STR_GENERATION_OBJECT_GENERATION :{BLACK}صانع الخامات
STR_GENERATION_TREE_GENERATION :{BLACK} مولد الشجر
STR_GENERATION_SETTINGUP_GAME :{BLACK}تجهيز لعبة STR_GENERATION_SETTINGUP_GAME :{BLACK}تجهيز لعبة
STR_GENERATION_PREPARING_TILELOOP :{BLACK} تشغيل المتكررة STR_GENERATION_PREPARING_TILELOOP :{BLACK} تشغيل المتكررة
STR_GENERATION_PREPARING_GAME :{BLACK}يُجَهِز اللعبه STR_GENERATION_PREPARING_GAME :{BLACK}يُجَهِز اللعبه

@ -2751,9 +2751,9 @@ STR_GENERATION_PROGRESS :{WHITE} %{NUM}
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Mundua sortu STR_GENERATION_WORLD_GENERATION :{BLACK}Mundua sortu
STR_GENERATION_RIVER_GENERATION :{BLACK}Erreka sorkuntza STR_GENERATION_RIVER_GENERATION :{BLACK}Erreka sorkuntza
STR_GENERATION_TREE_GENERATION :{BLACK} Zuhaitzak sortu
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektu sorkuntza
STR_GENERATION_CLEARING_TILES :{BLACK}Eremu zakarra eta haitzez beteta sortu STR_GENERATION_CLEARING_TILES :{BLACK}Eremu zakarra eta haitzez beteta sortu
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektu sorkuntza
STR_GENERATION_TREE_GENERATION :{BLACK} Zuhaitzak sortu
STR_GENERATION_SETTINGUP_GAME :{BLACK}Jokoaren ezarpenak STR_GENERATION_SETTINGUP_GAME :{BLACK}Jokoaren ezarpenak
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lauki buelta abiarazten STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lauki buelta abiarazten
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scripta abiarazten STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scripta abiarazten

@ -3723,9 +3723,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Стварэньне сусьвету STR_GENERATION_WORLD_GENERATION :{BLACK}Стварэньне сусьвету
STR_GENERATION_RIVER_GENERATION :{BLACK}Стварэньне рэк STR_GENERATION_RIVER_GENERATION :{BLACK}Стварэньне рэк
STR_GENERATION_TREE_GENERATION :{BLACK}Высаджваньне лясоў
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ґенэрацыя нерухомасьці
STR_GENERATION_CLEARING_TILES :{BLACK}Расстаноўка дэкарацыяў і камянёў STR_GENERATION_CLEARING_TILES :{BLACK}Расстаноўка дэкарацыяў і камянёў
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ґенэрацыя нерухомасьці
STR_GENERATION_TREE_GENERATION :{BLACK}Высаджваньне лясоў
STR_GENERATION_SETTINGUP_GAME :{BLACK}Наладка гульні STR_GENERATION_SETTINGUP_GAME :{BLACK}Наладка гульні
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Падрыхтоўка да запуску... STR_GENERATION_PREPARING_TILELOOP :{BLACK}Падрыхтоўка да запуску...
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выконваецца скрыпт STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выконваецца скрыпт

@ -2323,7 +2323,7 @@ STR_FACE_FACECODE :{BLACK}Número
STR_FACE_FACECODE_TOOLTIP :{BLACK}Ver e/ou definir o número de face do presidente da empresa STR_FACE_FACECODE_TOOLTIP :{BLACK}Ver e/ou definir o número de face do presidente da empresa
STR_FACE_FACECODE_CAPTION :{WHITE}Ver e/ou definir número de face do presidente STR_FACE_FACECODE_CAPTION :{WHITE}Ver e/ou definir número de face do presidente
STR_FACE_FACECODE_SET :{WHITE}Novo código de número de face foi definido STR_FACE_FACECODE_SET :{WHITE}Novo código de número de face foi definido
STR_FACE_FACECODE_ERR :{WHITE}Não foi possível alterar o número de face do presidente - deve ser um número entre 0 e 4,294,967,295! STR_FACE_FACECODE_ERR :{WHITE}Não foi possível definir o número de face do presidente - deve ser um número entre 0 e 4,294,967,295!
STR_FACE_SAVE :{BLACK}Salvar STR_FACE_SAVE :{BLACK}Salvar
STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita
STR_FACE_SAVE_DONE :{WHITE}Esta face será armazenada como sua favorita no arquivo de configuração do OpenTTD STR_FACE_SAVE_DONE :{WHITE}Esta face será armazenada como sua favorita no arquivo de configuração do OpenTTD
@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Você q
STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Geração de mundo STR_GENERATION_WORLD_GENERATION :{BLACK}Geração de mundo
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Geração de paisagem
STR_GENERATION_RIVER_GENERATION :{BLACK}Geração de rios STR_GENERATION_RIVER_GENERATION :{BLACK}Geração de rios
STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores
STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos
STR_GENERATION_CLEARING_TILES :{BLACK}Geração de áreas irregulares e rochosas STR_GENERATION_CLEARING_TILES :{BLACK}Geração de áreas irregulares e rochosas
STR_GENERATION_TOWN_GENERATION :{BLACK}Geração de localidades
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Geração de indústrias
STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração de objetos
STR_GENERATION_TREE_GENERATION :{BLACK}Geração de árvores
STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando o jogo
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Preparando o terreno STR_GENERATION_PREPARING_TILELOOP :{BLACK}Preparando o terreno
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando o script
@ -4922,7 +4925,7 @@ STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não
STR_ERROR_PNGMAP :{WHITE}Não foi possível carregar paisagem de PNG... STR_ERROR_PNGMAP :{WHITE}Não foi possível carregar paisagem de PNG...
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não foi encontrado STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não foi encontrado
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem. A imagem deve ser PNG de 8 ou 24-bit STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem. A imagem precisa ser PNG de 8 ou 24-bit
STR_ERROR_PNGMAP_MISC :{WHITE}... alguma coisa deu errado (provavelmente arquivo corrompido) STR_ERROR_PNGMAP_MISC :{WHITE}... alguma coisa deu errado (provavelmente arquivo corrompido)
STR_ERROR_BMPMAP :{WHITE}Não foi possível carregar paisagem de BMP... STR_ERROR_BMPMAP :{WHITE}Não foi possível carregar paisagem de BMP...
@ -4952,10 +4955,10 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Mensage
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora do mapa STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Fora do mapa
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa
STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro insuficiente - é necessário {CURRENCY_LONG} STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Dinheiro insuficiente - é necessário {CURRENCY_LONG}
STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}O terreno deve ser plano STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}O terreno precisa ser plano
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção errada
STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto... STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção deve ser demolida primeiro STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção precisa ser demolida primeiro
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... local não adequado STR_ERROR_SITE_UNSUITABLE :{WHITE}... local não adequado
STR_ERROR_ALREADY_BUILT :{WHITE}... já construído STR_ERROR_ALREADY_BUILT :{WHITE}... já construído

@ -2963,9 +2963,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Генерация на свят STR_GENERATION_WORLD_GENERATION :{BLACK}Генерация на свят
STR_GENERATION_RIVER_GENERATION :{BLACK}Създаване на река STR_GENERATION_RIVER_GENERATION :{BLACK}Създаване на река
STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва
STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични
STR_GENERATION_CLEARING_TILES :{BLACK}Създаване на твърда и скална повърност STR_GENERATION_CLEARING_TILES :{BLACK}Създаване на твърда и скална повърност
STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични
STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва
STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка на играта STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка на играта
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на плочките STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на плочките
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Пускане на програмен език STR_GENERATION_PREPARING_SCRIPT :{BLACK}Пускане на програмен език

@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Realmen
STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% complet STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% complet
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generació del món STR_GENERATION_WORLD_GENERATION :{BLACK}Generació del món
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Generació del terreny
STR_GENERATION_RIVER_GENERATION :{BLACK}Generació de rius STR_GENERATION_RIVER_GENERATION :{BLACK}Generació de rius
STR_GENERATION_TREE_GENERATION :{BLACK}Generació d'arbres
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generació inamovible
STR_GENERATION_CLEARING_TILES :{BLACK}Generació d'una àrea escarpada i rocosa STR_GENERATION_CLEARING_TILES :{BLACK}Generació d'una àrea escarpada i rocosa
STR_GENERATION_TOWN_GENERATION :{BLACK}Generació de poblacions
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Generació d'indústries
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generació inamovible
STR_GENERATION_TREE_GENERATION :{BLACK}Generació d'arbres
STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurant la partida STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurant la partida
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Passant el bucle de cel·les STR_GENERATION_PREPARING_TILELOOP :{BLACK}Passant el bucle de cel·les
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executant l'script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executant l'script
@ -5287,6 +5290,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvia l
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Encara no hi ha vehicles disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Encara no hi ha vehicles disponibles
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicieu una partida nova després de {DATE_SHORT} o useu un NewGRF que proporcioni vehicles primerencs. STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicieu una partida nova després de {DATE_SHORT} o useu un NewGRF que proporcioni vehicles primerencs.
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Les poblacions no disposen de tipus de carretera que puguin construir.
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvieu la configuració dels NewGRF
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Encara no hi ha tipus de carretera disponibles per a les poblacions.
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Comenceu una partida nova després del {DATE_SHORT} o feu servir un NewGRF que proporcioni tipus de carretera que puguin construir les poblacions.
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No pots fer que un tren passi d'una senyal amb perill... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No pots fer que un tren passi d'una senyal amb perill...

@ -3080,9 +3080,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% g
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Izrada svijeta STR_GENERATION_WORLD_GENERATION :{BLACK}Izrada svijeta
STR_GENERATION_RIVER_GENERATION :{BLACK}Generiranje rijeka STR_GENERATION_RIVER_GENERATION :{BLACK}Generiranje rijeka
STR_GENERATION_TREE_GENERATION :{BLACK}Generiranje drveća
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nepomično generiranje
STR_GENERATION_CLEARING_TILES :{BLACK}Generiranje grubog i stjenovitog područja STR_GENERATION_CLEARING_TILES :{BLACK}Generiranje grubog i stjenovitog područja
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nepomično generiranje
STR_GENERATION_TREE_GENERATION :{BLACK}Generiranje drveća
STR_GENERATION_SETTINGUP_GAME :{BLACK}Pripremam igru STR_GENERATION_SETTINGUP_GAME :{BLACK}Pripremam igru
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Izvršavam tile-petlju STR_GENERATION_PREPARING_TILELOOP :{BLACK}Izvršavam tile-petlju
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Izvođenje skripte u tijeku STR_GENERATION_PREPARING_SCRIPT :{BLACK}Izvođenje skripte u tijeku

@ -3480,9 +3480,9 @@ STR_GENERATION_PROGRESS :{WHITE}Z{NBSP}{
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Tvorba krajiny STR_GENERATION_WORLD_GENERATION :{BLACK}Tvorba krajiny
STR_GENERATION_RIVER_GENERATION :{BLACK}Generování řek STR_GENERATION_RIVER_GENERATION :{BLACK}Generování řek
STR_GENERATION_TREE_GENERATION :{BLACK}Výsadba stromů
STR_GENERATION_OBJECT_GENERATION :{BLACK}Výstavba nepřesunutelných objektů
STR_GENERATION_CLEARING_TILES :{BLACK}Tvorba členitého a kamenitého území STR_GENERATION_CLEARING_TILES :{BLACK}Tvorba členitého a kamenitého území
STR_GENERATION_OBJECT_GENERATION :{BLACK}Výstavba nepřesunutelných objektů
STR_GENERATION_TREE_GENERATION :{BLACK}Výsadba stromů
STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavování hry STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavování hry
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spouštění tile-loopu (cyklus na dílcích mapy) STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spouštění tile-loopu (cyklus na dílcích mapy)
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rozbíhání skriptu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rozbíhání skriptu

@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vil du
STR_GENERATION_PROGRESS :{WHITE}{NUM}% færdig STR_GENERATION_PROGRESS :{WHITE}{NUM}% færdig
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Verdensgenerering STR_GENERATION_WORLD_GENERATION :{BLACK}Verdensgenerering
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskabs generering
STR_GENERATION_RIVER_GENERATION :{BLACK}Flod-generering STR_GENERATION_RIVER_GENERATION :{BLACK}Flod-generering
STR_GENERATION_TREE_GENERATION :{BLACK}Trægenerering
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikke-flytbar generering
STR_GENERATION_CLEARING_TILES :{BLACK}Generer råt og stenet område STR_GENERATION_CLEARING_TILES :{BLACK}Generer råt og stenet område
STR_GENERATION_TOWN_GENERATION :{BLACK}By generation
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industri generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikke-flytbar generering
STR_GENERATION_TREE_GENERATION :{BLACK}Trægenerering
STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargør spil STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargør spil
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kører felt-løkken STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kører felt-løkken
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kørende script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kørende script
@ -5286,6 +5289,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Skift di
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen køretøjer er tilgængelige endnu STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen køretøjer er tilgængelige endnu
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nyt spil efter {DATE_SHORT} eller brug en NewGRF der giver tidlige køretøjer STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nyt spil efter {DATE_SHORT} eller brug en NewGRF der giver tidlige køretøjer
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Der findes ingen vejtyper, der kan bygges i by
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Skift din NewGRF konfiguration
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Der er endnu ingen tilgængelige vejtyper, der kan bygges i byer
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nyt spil efter{DATE_SHORT} eller brug en NewGRF, der leverer vejtyper, der kan bygges tidligt i byen
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke få toget til at passere signalet... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke få toget til at passere signalet...

@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Wereldontwikkeling STR_GENERATION_WORLD_GENERATION :{BLACK}Wereldontwikkeling
STR_GENERATION_RIVER_GENERATION :{BLACK}Rivierplaatsing STR_GENERATION_RIVER_GENERATION :{BLACK}Rivierplaatsing
STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten
STR_GENERATION_CLEARING_TILES :{BLACK}Ontwikkeling van ruig en rotsachtig gebied STR_GENERATION_CLEARING_TILES :{BLACK}Ontwikkeling van ruig en rotsachtig gebied
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten
STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing
STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel wordt geconfigureerd STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel wordt geconfigureerd
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Bezig met tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Bezig met tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script loopt STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script loopt
@ -5286,6 +5286,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Pas je N
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nog geen voertuigen beschikbaar STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nog geen voertuigen beschikbaar
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE} Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF dat in vroege voertuigen voorziet STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE} Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF dat in vroege voertuigen voorziet
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Geen wegtypen beschikbaar voor in de stad
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Wijzig je NewGRF-configuratie
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Er zijn nog geen wegtypen beschikbaar voor steden
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF met wegtypen die al vroeg in steden gebruikt kunnen worden
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het sein laten passeren bij gevaar... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het sein laten passeren bij gevaar...

@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you
STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}World generation STR_GENERATION_WORLD_GENERATION :{BLACK}World generation
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape generation
STR_GENERATION_RIVER_GENERATION :{BLACK}River generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation
STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation
STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation
STR_GENERATION_TOWN_GENERATION :{BLACK}Town generation
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation
STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation
STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script

@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you
STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}World generation STR_GENERATION_WORLD_GENERATION :{BLACK}World generation
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape generation
STR_GENERATION_RIVER_GENERATION :{BLACK}River generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation
STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation
STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation
STR_GENERATION_TOWN_GENERATION :{BLACK}Town generation
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation
STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation
STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script

@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you
STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}World generation STR_GENERATION_WORLD_GENERATION :{BLACK}World generation
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape generation
STR_GENERATION_RIVER_GENERATION :{BLACK}River generation STR_GENERATION_RIVER_GENERATION :{BLACK}River generation
STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation
STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation STR_GENERATION_CLEARING_TILES :{BLACK}Rough and rocky area generation
STR_GENERATION_TOWN_GENERATION :{BLACK}Town generation
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_GENERATION_OBJECT_GENERATION :{BLACK}Object generation
STR_GENERATION_TREE_GENERATION :{BLACK}Tree generation
STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game STR_GENERATION_SETTINGUP_GAME :{BLACK}Setting up game
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script
@ -5286,6 +5289,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change y
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}No vehicles are available yet
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early vehicles STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early vehicles
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}No town-buildable road types are available
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}No town-buildable road types are available yet
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start a new game after {DATE_SHORT} or use a NewGRF that provides early town-buildable road types
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger...

@ -3333,9 +3333,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Mondgenerado STR_GENERATION_WORLD_GENERATION :{BLACK}Mondgenerado
STR_GENERATION_RIVER_GENERATION :{BLACK}Rivergenerado STR_GENERATION_RIVER_GENERATION :{BLACK}Rivergenerado
STR_GENERATION_TREE_GENERATION :{BLACK}Arba generado
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nemoveblaĵa generado
STR_GENERATION_CLEARING_TILES :{BLACK}Generado de malglataj kaj rokaj regionoj STR_GENERATION_CLEARING_TILES :{BLACK}Generado de malglataj kaj rokaj regionoj
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nemoveblaĵa generado
STR_GENERATION_TREE_GENERATION :{BLACK}Arba generado
STR_GENERATION_SETTINGUP_GAME :{BLACK}Agordante ludon STR_GENERATION_SETTINGUP_GAME :{BLACK}Agordante ludon
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trakurante kvadratojn STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trakurante kvadratojn
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ruligas la skripton STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ruligas la skripton

@ -3447,9 +3447,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% v
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Maailma tekitamine STR_GENERATION_WORLD_GENERATION :{BLACK}Maailma tekitamine
STR_GENERATION_RIVER_GENERATION :{BLACK}Jõgede tekitamine STR_GENERATION_RIVER_GENERATION :{BLACK}Jõgede tekitamine
STR_GENERATION_TREE_GENERATION :{BLACK}Puude tekitamine
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekti tekitamine
STR_GENERATION_CLEARING_TILES :{BLACK}Mägise ja kivise maa-ala tekitamine STR_GENERATION_CLEARING_TILES :{BLACK}Mägise ja kivise maa-ala tekitamine
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekti tekitamine
STR_GENERATION_TREE_GENERATION :{BLACK}Puude tekitamine
STR_GENERATION_SETTINGUP_GAME :{BLACK}Mängu seadistamine STR_GENERATION_SETTINGUP_GAME :{BLACK}Mängu seadistamine
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ruudustiku töötlemine STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ruudustiku töötlemine
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Täitmisel olev skript STR_GENERATION_PREPARING_SCRIPT :{BLACK}Täitmisel olev skript

@ -2583,9 +2583,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% l
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Heims framleiðsla STR_GENERATION_WORLD_GENERATION :{BLACK}Heims framleiðsla
STR_GENERATION_RIVER_GENERATION :{BLACK}Løks framleiðsla STR_GENERATION_RIVER_GENERATION :{BLACK}Løks framleiðsla
STR_GENERATION_TREE_GENERATION :{BLACK}Træ framleiðsla
STR_GENERATION_OBJECT_GENERATION :{BLACK}Luta framleiðsla
STR_GENERATION_CLEARING_TILES :{BLACK}Framleiðsa av harrendum og grýtutum øki STR_GENERATION_CLEARING_TILES :{BLACK}Framleiðsa av harrendum og grýtutum øki
STR_GENERATION_OBJECT_GENERATION :{BLACK}Luta framleiðsla
STR_GENERATION_TREE_GENERATION :{BLACK}Træ framleiðsla
STR_GENERATION_SETTINGUP_GAME :{BLACK}Ger spæli klárt STR_GENERATION_SETTINGUP_GAME :{BLACK}Ger spæli klárt
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Koyrir punta sloyfu STR_GENERATION_PREPARING_TILELOOP :{BLACK}Koyrir punta sloyfu
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Koyrir skript STR_GENERATION_PREPARING_SCRIPT :{BLACK}Koyrir skript

@ -2378,9 +2378,9 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartan k
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartan koko{}Valitse lajitellaksesi koon mukaan STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartan koko{}Valitse lajitellaksesi koon mukaan
STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Päiväys STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Päiväys
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Nykyinen päivämäärä STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Nykyinen päivämäärä
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}min STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}{NBSP}h {NUM}{NBSP}min
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Peliaika STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Peliaika
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Peliaika, kun peli{}ei ollut pysäytettynä STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Pelaamisaika, kun{}peli ei ole ollut pysäytettynä
STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Kieli, palvelimen versio, jne. STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Kieli, palvelimen versio, jne.
STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Napsauta peliä luettelossa valitaksesi STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Napsauta peliä luettelossa valitaksesi
@ -2396,7 +2396,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Palveli
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutsukoodi: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutsukoodi: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aloitusvuosi: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aloitusvuosi: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Päivämäärä: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Päivämäärä: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Peliaika: {WHITE}{NUM}h {NUM}min STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Peliaika: {WHITE}{NUM}{NBSP}h {NUM}{NBSP}min
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Peliskripti: {WHITE}{STRING} (v.{NBSP}{NUM}) STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Peliskripti: {WHITE}{STRING} (v.{NBSP}{NUM})
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu! STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu!
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI
@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Haluatk
STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Maaston luominen
STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen
STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen
STR_GENERATION_OBJECT_GENERATION :{BLACK}Siirtämättömän luominen
STR_GENERATION_CLEARING_TILES :{BLACK}Karun ja kivisen alueen luominen STR_GENERATION_CLEARING_TILES :{BLACK}Karun ja kivisen alueen luominen
STR_GENERATION_TOWN_GENERATION :{BLACK}Kuntien luominen
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Tuotantolaitosten luominen
STR_GENERATION_OBJECT_GENERATION :{BLACK}Siirtämättömän luominen
STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen
STR_GENERATION_SETTINGUP_GAME :{BLACK}Valmistellaan peliä STR_GENERATION_SETTINGUP_GAME :{BLACK}Valmistellaan peliä
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ajetaan tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ajetaan tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Suoritetaan skriptiä STR_GENERATION_PREPARING_SCRIPT :{BLACK}Suoritetaan skriptiä
@ -4916,7 +4919,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<ei saatavilla>
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu
# Map generation messages # Map generation messages
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan generointi peruutettu...{}... ei kelvollisia kuntien sijainteja STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan luominen peruutettu…{}… ei kelvollisia kuntien sijainteja
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole yhtään kuntaa STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole yhtään kuntaa
STR_ERROR_PNGMAP :{WHITE}Maastoa ei voida ladata PNG-tiedostosta... STR_ERROR_PNGMAP :{WHITE}Maastoa ei voida ladata PNG-tiedostosta...

@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Voulez-
STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% réalisé{P "" s} STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% réalisé{P "" s}
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Création du monde STR_GENERATION_WORLD_GENERATION :{BLACK}Création du monde
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Génération du terrain
STR_GENERATION_RIVER_GENERATION :{BLACK}Création des rivières STR_GENERATION_RIVER_GENERATION :{BLACK}Création des rivières
STR_GENERATION_TREE_GENERATION :{BLACK}Création des arbres
STR_GENERATION_OBJECT_GENERATION :{BLACK}Création des objets inamovibles
STR_GENERATION_CLEARING_TILES :{BLACK}Création des zones rugueuses et rocheuses STR_GENERATION_CLEARING_TILES :{BLACK}Création des zones rugueuses et rocheuses
STR_GENERATION_TOWN_GENERATION :{BLACK}Génération des villes
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Génération des industries
STR_GENERATION_OBJECT_GENERATION :{BLACK}Création des objets inamovibles
STR_GENERATION_TREE_GENERATION :{BLACK}Création des arbres
STR_GENERATION_SETTINGUP_GAME :{BLACK}Configuration du jeu STR_GENERATION_SETTINGUP_GAME :{BLACK}Configuration du jeu
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Rafraîchissement du terrain STR_GENERATION_PREPARING_TILELOOP :{BLACK}Rafraîchissement du terrain
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Exécution du script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Exécution du script
@ -5287,6 +5290,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifier
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Il n'y a pas encore de véhicules disponibles STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Il n'y a pas encore de véhicules disponibles
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Commencer un nouvelle partie après {DATE_SHORT} ou utiliser un NewGRF qui propose des véhicules plus tôt STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Commencer un nouvelle partie après {DATE_SHORT} ou utiliser un NewGRF qui propose des véhicules plus tôt
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Aucun type de route disponible pour les villes
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifiez votre configuration NewGRF
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Aucun type de route pour les villes disponible pour le moment
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Commencez une nouvelle partie après {DATE_SHORT} ou utilisez un NewGRF pourvoyant des routes plus tôt pour les villes.
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossible de forcer le train à avancer sous le danger... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossible de forcer le train à avancer sous le danger...

@ -2719,9 +2719,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Wrâldgeneraasje STR_GENERATION_WORLD_GENERATION :{BLACK}Wrâldgeneraasje
STR_GENERATION_RIVER_GENERATION :{BLACK}Riviergeneraasje STR_GENERATION_RIVER_GENERATION :{BLACK}Riviergeneraasje
STR_GENERATION_TREE_GENERATION :{BLACK}Bostgeneraasje
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekt meitsje
STR_GENERATION_CLEARING_TILES :{BLACK}Rûchtes en rotsen generearje STR_GENERATION_CLEARING_TILES :{BLACK}Rûchtes en rotsen generearje
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekt meitsje
STR_GENERATION_TREE_GENERATION :{BLACK}Bostgeneraasje
STR_GENERATION_SETTINGUP_GAME :{BLACK}Set spul klear STR_GENERATION_SETTINGUP_GAME :{BLACK}Set spul klear
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trochrint tegellus STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trochrint tegellus
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Fiert skript út STR_GENERATION_PREPARING_SCRIPT :{BLACK}Fiert skript út

@ -3097,9 +3097,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Gin saoghal STR_GENERATION_WORLD_GENERATION :{BLACK}Gin saoghal
STR_GENERATION_RIVER_GENERATION :{BLACK}Gin aibhnichean STR_GENERATION_RIVER_GENERATION :{BLACK}Gin aibhnichean
STR_GENERATION_TREE_GENERATION :{BLACK}Gin craobhan
STR_GENERATION_OBJECT_GENERATION :{BLACK}Gin oibseactan
STR_GENERATION_CLEARING_TILES :{BLACK}Gin raon garbh is creagach STR_GENERATION_CLEARING_TILES :{BLACK}Gin raon garbh is creagach
STR_GENERATION_OBJECT_GENERATION :{BLACK}Gin oibseactan
STR_GENERATION_TREE_GENERATION :{BLACK}Gin craobhan
STR_GENERATION_SETTINGUP_GAME :{BLACK}A' suidheachadh a' gheama STR_GENERATION_SETTINGUP_GAME :{BLACK}A' suidheachadh a' gheama
STR_GENERATION_PREPARING_TILELOOP :{BLACK}A' ruith lùb-lice STR_GENERATION_PREPARING_TILELOOP :{BLACK}A' ruith lùb-lice
STR_GENERATION_PREPARING_SCRIPT :{BLACK}A' ruith sgriobt STR_GENERATION_PREPARING_SCRIPT :{BLACK}A' ruith sgriobt

@ -3393,9 +3393,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Xeración do mundo STR_GENERATION_WORLD_GENERATION :{BLACK}Xeración do mundo
STR_GENERATION_RIVER_GENERATION :{BLACK}Xeración de ríos STR_GENERATION_RIVER_GENERATION :{BLACK}Xeración de ríos
STR_GENERATION_TREE_GENERATION :{BLACK}Xeración de árbores
STR_GENERATION_OBJECT_GENERATION :{BLACK}Xeración de obxectos
STR_GENERATION_CLEARING_TILES :{BLACK}Xeración de áreas rochosas e escarpadas STR_GENERATION_CLEARING_TILES :{BLACK}Xeración de áreas rochosas e escarpadas
STR_GENERATION_OBJECT_GENERATION :{BLACK}Xeración de obxectos
STR_GENERATION_TREE_GENERATION :{BLACK}Xeración de árbores
STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Executando bucle de cadros STR_GENERATION_PREPARING_TILELOOP :{BLACK}Executando bucle de cadros
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando script

@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% a
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Spielfeld wird erzeugt STR_GENERATION_WORLD_GENERATION :{BLACK}Spielfeld wird erzeugt
STR_GENERATION_RIVER_GENERATION :{BLACK}Flussgenerierung STR_GENERATION_RIVER_GENERATION :{BLACK}Flussgenerierung
STR_GENERATION_TREE_GENERATION :{BLACK}Bäume werden erzeugt
STR_GENERATION_OBJECT_GENERATION :{BLACK}Unbewegliche Objekte werden erzeugt
STR_GENERATION_CLEARING_TILES :{BLACK}Raue, felsige Landschaft wird erzeugt STR_GENERATION_CLEARING_TILES :{BLACK}Raue, felsige Landschaft wird erzeugt
STR_GENERATION_OBJECT_GENERATION :{BLACK}Unbewegliche Objekte werden erzeugt
STR_GENERATION_TREE_GENERATION :{BLACK}Bäume werden erzeugt
STR_GENERATION_SETTINGUP_GAME :{BLACK}Spiel wird vorbereitet STR_GENERATION_SETTINGUP_GAME :{BLACK}Spiel wird vorbereitet
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spielfeld wird belebt STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spielfeld wird belebt
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Führe Skript aus STR_GENERATION_PREPARING_SCRIPT :{BLACK}Führe Skript aus

@ -3485,10 +3485,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Σίγ
STR_GENERATION_PROGRESS :{WHITE}{NUM}% ολοκληρώθηκε STR_GENERATION_PROGRESS :{WHITE}{NUM}% ολοκληρώθηκε
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Δημιουργία κόσμου STR_GENERATION_WORLD_GENERATION :{BLACK}Δημιουργία κόσμου
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Δημιουργία τοπίου
STR_GENERATION_RIVER_GENERATION :{BLACK}Δημιουργία ποταμού STR_GENERATION_RIVER_GENERATION :{BLACK}Δημιουργία ποταμού
STR_GENERATION_TREE_GENERATION :{BLACK}Δημιουργία δέντρων
STR_GENERATION_OBJECT_GENERATION :{BLACK}Δημιουργία μη μετακινούμενων
STR_GENERATION_CLEARING_TILES :{BLACK}Δημιουργία άγριας και πετρώδης περιοχής STR_GENERATION_CLEARING_TILES :{BLACK}Δημιουργία άγριας και πετρώδης περιοχής
STR_GENERATION_TOWN_GENERATION :{BLACK}Δημιουργία πόλης
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Δημιουργία βιομηχανίας
STR_GENERATION_OBJECT_GENERATION :{BLACK}Δημιουργία μη μετακινούμενων
STR_GENERATION_TREE_GENERATION :{BLACK}Δημιουργία δέντρων
STR_GENERATION_SETTINGUP_GAME :{BLACK}Ρύθμιση παιχνιδιού STR_GENERATION_SETTINGUP_GAME :{BLACK}Ρύθμιση παιχνιδιού
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Εκτέλεση βρόχου τετραγωνίδιων STR_GENERATION_PREPARING_TILELOOP :{BLACK}Εκτέλεση βρόχου τετραγωνίδιων
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Τρέχουσα δέσμη ενεργειών STR_GENERATION_PREPARING_SCRIPT :{BLACK}Τρέχουσα δέσμη ενεργειών
@ -5384,8 +5387,12 @@ STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... όλ
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Δεν θα είναι κανένα όχημα διαθέσιμο STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Δεν θα είναι κανένα όχημα διαθέσιμο
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Αλλάξτε τις ρύθμισεις NewGRF σας STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Αλλάξτε τις ρύθμισεις NewGRF σας
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Κανένα όχημα δεν είναι διαθέσιμο ακόμη STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Κανένα όχημα δεν είναι διαθέσιμο ακόμη
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι αργότερα από {DATE_SHORT} η χρησιμοποιήστε ένα NewGRF το οποίο προσφέρει νωρίτερα οχήματα STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι αργότερα από {DATE_SHORT} η χρησιμοποιήστε ένα NewGRF το οποίο προσφέρει πρώιμα οχήματα
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Δεν υπάρχουν διαθέσιμοι τύποι δρόμων που μπορούν να κατασκευαστούν από πόλη
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Αλλάξτε τις ρύθμισεις NewGRF σας
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Δεν υπάρχουν διαθέσιμοι τύποι δρόμων που μπορούν να κατασκευαστούν από πόλη ακόμη
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Ξεκινήστε ένα νέο παιχνίδι μετά από την {DATE_SHORT} ή χρησιμοποιήστε ένα NewGRF που παρέχει πρώιμους τύπους δρόμων που μπορούν να κατασκευαστούν από πόλη
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Δεν μπορεί το τρένο να περάσει σήμα με κίνδυνο... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Δεν μπορεί το τρένο να περάσει σήμα με κίνδυνο...

@ -2981,9 +2981,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% :
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}יצור עולם STR_GENERATION_WORLD_GENERATION :{BLACK}יצור עולם
STR_GENERATION_RIVER_GENERATION :{BLACK}יצירת נהרות STR_GENERATION_RIVER_GENERATION :{BLACK}יצירת נהרות
STR_GENERATION_TREE_GENERATION :{BLACK}יצירת עצים
STR_GENERATION_OBJECT_GENERATION :{BLACK}יצירת מבנים בלתי ניידים
STR_GENERATION_CLEARING_TILES :{BLACK}יצירת איזורים סלעיים STR_GENERATION_CLEARING_TILES :{BLACK}יצירת איזורים סלעיים
STR_GENERATION_OBJECT_GENERATION :{BLACK}יצירת מבנים בלתי ניידים
STR_GENERATION_TREE_GENERATION :{BLACK}יצירת עצים
STR_GENERATION_SETTINGUP_GAME :{BLACK}קביעת הגדרות המשחק STR_GENERATION_SETTINGUP_GAME :{BLACK}קביעת הגדרות המשחק
STR_GENERATION_PREPARING_TILELOOP :{BLACK}מריץ לולאה על כל המשבצות STR_GENERATION_PREPARING_TILELOOP :{BLACK}מריץ לולאה על כל המשבצות
STR_GENERATION_PREPARING_SCRIPT :{BLACK}מריץ סקריפט STR_GENERATION_PREPARING_SCRIPT :{BLACK}מריץ סקריפט

@ -3455,9 +3455,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Világ létrehozása STR_GENERATION_WORLD_GENERATION :{BLACK}Világ létrehozása
STR_GENERATION_RIVER_GENERATION :{BLACK}Folyó generálás STR_GENERATION_RIVER_GENERATION :{BLACK}Folyó generálás
STR_GENERATION_TREE_GENERATION :{BLACK}Fák generálása
STR_GENERATION_OBJECT_GENERATION :{BLACK}Mozgathatatlan létesítmények létrehozása
STR_GENERATION_CLEARING_TILES :{BLACK}Durva és köves területek generálása STR_GENERATION_CLEARING_TILES :{BLACK}Durva és köves területek generálása
STR_GENERATION_OBJECT_GENERATION :{BLACK}Mozgathatatlan létesítmények létrehozása
STR_GENERATION_TREE_GENERATION :{BLACK}Fák generálása
STR_GENERATION_SETTINGUP_GAME :{BLACK}Játék beállítása STR_GENERATION_SETTINGUP_GAME :{BLACK}Játék beállítása
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Mezők véglegesítése STR_GENERATION_PREPARING_TILELOOP :{BLACK}Mezők véglegesítése
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Futó szkript STR_GENERATION_PREPARING_SCRIPT :{BLACK}Futó szkript

@ -2691,9 +2691,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% t
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Sköpun heims STR_GENERATION_WORLD_GENERATION :{BLACK}Sköpun heims
STR_GENERATION_RIVER_GENERATION :{BLACK}Bý til ár STR_GENERATION_RIVER_GENERATION :{BLACK}Bý til ár
STR_GENERATION_TREE_GENERATION :{BLACK}Gróðursetning trjáa
STR_GENERATION_OBJECT_GENERATION :{BLACK}Staðsetning fastra hluta
STR_GENERATION_CLEARING_TILES :{BLACK}Hrjúft og grýtt landslag STR_GENERATION_CLEARING_TILES :{BLACK}Hrjúft og grýtt landslag
STR_GENERATION_OBJECT_GENERATION :{BLACK}Staðsetning fastra hluta
STR_GENERATION_TREE_GENERATION :{BLACK}Gróðursetning trjáa
STR_GENERATION_SETTINGUP_GAME :{BLACK}Set upp leik STR_GENERATION_SETTINGUP_GAME :{BLACK}Set upp leik
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Keyri reitalykkju STR_GENERATION_PREPARING_TILELOOP :{BLACK}Keyri reitalykkju
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Keyri forskrift STR_GENERATION_PREPARING_SCRIPT :{BLACK}Keyri forskrift

@ -3330,9 +3330,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% s
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Pembuatan Bentang Darat STR_GENERATION_WORLD_GENERATION :{BLACK}Pembuatan Bentang Darat
STR_GENERATION_RIVER_GENERATION :{BLACK}Pembuatan Sungai STR_GENERATION_RIVER_GENERATION :{BLACK}Pembuatan Sungai
STR_GENERATION_TREE_GENERATION :{BLACK}Membuat pepohonan
STR_GENERATION_OBJECT_GENERATION :{BLACK}Membuat objek tak bergerak
STR_GENERATION_CLEARING_TILES :{BLACK}Membersihan area STR_GENERATION_CLEARING_TILES :{BLACK}Membersihan area
STR_GENERATION_OBJECT_GENERATION :{BLACK}Membuat objek tak bergerak
STR_GENERATION_TREE_GENERATION :{BLACK}Membuat pepohonan
STR_GENERATION_SETTINGUP_GAME :{BLACK}Mengatur permainan STR_GENERATION_SETTINGUP_GAME :{BLACK}Mengatur permainan
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Menyiapkan area loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Menyiapkan area loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Menjalankan skrip STR_GENERATION_PREPARING_SCRIPT :{BLACK}Menjalankan skrip

@ -3116,9 +3116,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Domhan a chruthú STR_GENERATION_WORLD_GENERATION :{BLACK}Domhan a chruthú
STR_GENERATION_RIVER_GENERATION :{BLACK}Giniúint aibhneacha STR_GENERATION_RIVER_GENERATION :{BLACK}Giniúint aibhneacha
STR_GENERATION_TREE_GENERATION :{BLACK}Crainn a chruthú
STR_GENERATION_OBJECT_GENERATION :{BLACK}Cruthú oibiachtaí
STR_GENERATION_CLEARING_TILES :{BLACK}Limistear garbh agus carraigeach a chruthú STR_GENERATION_CLEARING_TILES :{BLACK}Limistear garbh agus carraigeach a chruthú
STR_GENERATION_OBJECT_GENERATION :{BLACK}Cruthú oibiachtaí
STR_GENERATION_TREE_GENERATION :{BLACK}Crainn a chruthú
STR_GENERATION_SETTINGUP_GAME :{BLACK}Cluiche á chumrú STR_GENERATION_SETTINGUP_GAME :{BLACK}Cluiche á chumrú
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lúb tíleanna á rith STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lúb tíleanna á rith
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script reatha STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script reatha

@ -3433,9 +3433,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generazione mondo STR_GENERATION_WORLD_GENERATION :{BLACK}Generazione mondo
STR_GENERATION_RIVER_GENERATION :{BLACK}Generazione fiumi STR_GENERATION_RIVER_GENERATION :{BLACK}Generazione fiumi
STR_GENERATION_TREE_GENERATION :{BLACK}Generazione alberi
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generazione oggetti inamovibili
STR_GENERATION_CLEARING_TILES :{BLACK}Generazione aree brulle e rocciose STR_GENERATION_CLEARING_TILES :{BLACK}Generazione aree brulle e rocciose
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generazione oggetti inamovibili
STR_GENERATION_TREE_GENERATION :{BLACK}Generazione alberi
STR_GENERATION_SETTINGUP_GAME :{BLACK}Impostazione partita STR_GENERATION_SETTINGUP_GAME :{BLACK}Impostazione partita
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generazione caselle del terreno STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generazione caselle del terreno
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Esecuzione script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Esecuzione script

@ -3203,9 +3203,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}マップ生成 STR_GENERATION_WORLD_GENERATION :{BLACK}マップ生成
STR_GENERATION_RIVER_GENERATION :{BLACK}河川を生成中 STR_GENERATION_RIVER_GENERATION :{BLACK}河川を生成中
STR_GENERATION_TREE_GENERATION :{BLACK}植林中
STR_GENERATION_OBJECT_GENERATION :{BLACK}灯台/電波塔配置中
STR_GENERATION_CLEARING_TILES :{BLACK}岩石/荒地を設定中 STR_GENERATION_CLEARING_TILES :{BLACK}岩石/荒地を設定中
STR_GENERATION_OBJECT_GENERATION :{BLACK}灯台/電波塔配置中
STR_GENERATION_TREE_GENERATION :{BLACK}植林中
STR_GENERATION_SETTINGUP_GAME :{BLACK}ゲームを設定中 STR_GENERATION_SETTINGUP_GAME :{BLACK}ゲームを設定中
STR_GENERATION_PREPARING_TILELOOP :{BLACK}タイルループを実行中 STR_GENERATION_PREPARING_TILELOOP :{BLACK}タイルループを実行中
STR_GENERATION_PREPARING_SCRIPT :{BLACK}スクリプト実行中 STR_GENERATION_PREPARING_SCRIPT :{BLACK}スクリプト実行中

@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}세계
STR_GENERATION_PROGRESS :{WHITE}{NUM}% 완료 STR_GENERATION_PROGRESS :{WHITE}{NUM}% 완료
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}지형 만드는 중 STR_GENERATION_WORLD_GENERATION :{BLACK}지형 만드는 중
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}지형 생성
STR_GENERATION_RIVER_GENERATION :{BLACK}강 제작 STR_GENERATION_RIVER_GENERATION :{BLACK}강 제작
STR_GENERATION_TREE_GENERATION :{BLACK}나무 심는 중
STR_GENERATION_OBJECT_GENERATION :{BLACK}움직일수 없는 객체 만드는 중
STR_GENERATION_CLEARING_TILES :{BLACK}거친 암석지대 만드는 중 STR_GENERATION_CLEARING_TILES :{BLACK}거친 암석지대 만드는 중
STR_GENERATION_TOWN_GENERATION :{BLACK}도시 생성
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}산업시설 생성
STR_GENERATION_OBJECT_GENERATION :{BLACK}움직일수 없는 객체 만드는 중
STR_GENERATION_TREE_GENERATION :{BLACK}나무 심는 중
STR_GENERATION_SETTINGUP_GAME :{BLACK}게임 설정 중 STR_GENERATION_SETTINGUP_GAME :{BLACK}게임 설정 중
STR_GENERATION_PREPARING_TILELOOP :{BLACK}타일 루프 실행 중 STR_GENERATION_PREPARING_TILELOOP :{BLACK}타일 루프 실행 중
STR_GENERATION_PREPARING_SCRIPT :{BLACK}스크립트 생성 중 STR_GENERATION_PREPARING_SCRIPT :{BLACK}스크립트 생성 중
@ -3489,6 +3492,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :도로 종류
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF 변수 60+x 매개 변수 (16진법) STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF 변수 60+x 매개 변수 (16진법)
# Sprite aligner window # Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}스프라이트 정렬: ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}스프라이트 정렬: 액션 0xA, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}스프라이트 정렬: 액션 0x5, 타입 {HEX}, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}다음 스프라이트 STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}다음 스프라이트
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다. STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다.
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}스프라이트 번호 입력 STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}스프라이트 번호 입력
@ -3497,6 +3503,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}이전
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 이전 보통 스프라이트로 이동하고, 첫 번째 스프라이트에 다다르면 마지막으로 돌아갑니다. STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 이전 보통 스프라이트로 이동하고, 첫 번째 스프라이트에 다다르면 마지막으로 돌아갑니다.
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}현재 선택된 스프라이트를 표현합니다. 이 스프라이트를 표현할 때, 정렬 상태는 무시하고 표현합니다. STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}현재 선택된 스프라이트를 표현합니다. 이 스프라이트를 표현할 때, 정렬 상태는 무시하고 표현합니다.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}X축이나 Y축 방향으로 스프라이트를 이동시킵니다. CTRL+클릭하면 한 번에 8씩 이동시킬 수 있습니다 STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}X축이나 Y축 방향으로 스프라이트를 이동시킵니다. CTRL+클릭하면 한 번에 8씩 이동시킬 수 있습니다
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
###length 2 ###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}오프셋 가운데 정렬 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}오프셋 가운데 정렬
@ -5279,10 +5286,14 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... 차
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... 동일한 구성이 아닌 차량이 있습니다 STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... 동일한 구성이 아닌 차량이 있습니다
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}사용할 수 있는 차량이 모두 없어질 것입니다 STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}사용할 수 있는 차량이 모두 없어질 것입니다
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF 설정을 변경하십시오 STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF 설정을 변경하세요
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}사용할 수 있는 차량이 하나도 없습니다 STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}사용할 수 있는 차량이 하나도 없습니다
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 차량이 더 빨리 개발되는 NewGRF을 사용하십시오. STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 차량이 더 빨리 개발되는 NewGRF을 사용하세요
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}도시가 만들 수 있는 도로 종류가 없습니다
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF 설정을 변경하세요
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}아직 도시가 만들 수 있는 도로 종류가 없습니다
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT}년 이후에 새로운 게임을 시작하거나 도시가 더 빨리 사용할 수 있는 도로 종류를 추가하는 NewGRF를 사용하세요
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}너무 위험해서 신호를 무시할 수 없습니다... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}너무 위험해서 신호를 무시할 수 없습니다...
@ -5834,6 +5845,7 @@ STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING} STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING} STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING} STR_JUST_STRING2 :{STRING}
STR_JUST_STRING4 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING} STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -3065,9 +3065,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Creatio orbis terrarum STR_GENERATION_WORLD_GENERATION :{BLACK}Creatio orbis terrarum
STR_GENERATION_RIVER_GENERATION :{BLACK}Creatio fluminum STR_GENERATION_RIVER_GENERATION :{BLACK}Creatio fluminum
STR_GENERATION_TREE_GENERATION :{BLACK}Creatio arborum
STR_GENERATION_OBJECT_GENERATION :{BLACK}Creatio ornamentorum
STR_GENERATION_CLEARING_TILES :{BLACK}Creatio terrarum saxosarum asperarumque STR_GENERATION_CLEARING_TILES :{BLACK}Creatio terrarum saxosarum asperarumque
STR_GENERATION_OBJECT_GENERATION :{BLACK}Creatio ornamentorum
STR_GENERATION_TREE_GENERATION :{BLACK}Creatio arborum
STR_GENERATION_SETTINGUP_GAME :{BLACK}Ludum instruens STR_GENERATION_SETTINGUP_GAME :{BLACK}Ludum instruens
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Tegularum cursum exsequens STR_GENERATION_PREPARING_TILELOOP :{BLACK}Tegularum cursum exsequens
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scriptum exsequens STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scriptum exsequens

@ -3398,9 +3398,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% p
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaules radīšana STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaules radīšana
STR_GENERATION_RIVER_GENERATION :{BLACK}Upes radīšana STR_GENERATION_RIVER_GENERATION :{BLACK}Upes radīšana
STR_GENERATION_TREE_GENERATION :{BLACK}Koka radīšana
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekta radīšana
STR_GENERATION_CLEARING_TILES :{BLACK}Nelīdzena un akmeņaina apvidus radīšana STR_GENERATION_CLEARING_TILES :{BLACK}Nelīdzena un akmeņaina apvidus radīšana
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objekta radīšana
STR_GENERATION_TREE_GENERATION :{BLACK}Koka radīšana
STR_GENERATION_SETTINGUP_GAME :{BLACK}Iestatīt spēli STR_GENERATION_SETTINGUP_GAME :{BLACK}Iestatīt spēli
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Skrejošs nosaukums STR_GENERATION_PREPARING_TILELOOP :{BLACK}Skrejošs nosaukums
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Strādājošs skripts STR_GENERATION_PREPARING_SCRIPT :{BLACK}Strādājošs skripts

@ -3382,9 +3382,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% u
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaulio generacija STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaulio generacija
STR_GENERATION_RIVER_GENERATION :{BLACK}Upių generavimas STR_GENERATION_RIVER_GENERATION :{BLACK}Upių generavimas
STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nejudinama generacija
STR_GENERATION_CLEARING_TILES :{BLACK}Daubų ir uolų generacija STR_GENERATION_CLEARING_TILES :{BLACK}Daubų ir uolų generacija
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nejudinama generacija
STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija
STR_GENERATION_SETTINGUP_GAME :{BLACK}Sukurti zaidima STR_GENERATION_SETTINGUP_GAME :{BLACK}Sukurti zaidima
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Paleidžiamas tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Paleidžiamas tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skriptas veikia STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skriptas veikia

@ -3391,9 +3391,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Welt-Generatioun STR_GENERATION_WORLD_GENERATION :{BLACK}Welt-Generatioun
STR_GENERATION_RIVER_GENERATION :{BLACK}Generéiren vu Flëss STR_GENERATION_RIVER_GENERATION :{BLACK}Generéiren vu Flëss
STR_GENERATION_TREE_GENERATION :{BLACK}Baam Generatioun
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objets-Generatioun
STR_GENERATION_CLEARING_TILES :{BLACK}Generatioun vu knubbelegem a stengege Land STR_GENERATION_CLEARING_TILES :{BLACK}Generatioun vu knubbelegem a stengege Land
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objets-Generatioun
STR_GENERATION_TREE_GENERATION :{BLACK}Baam Generatioun
STR_GENERATION_SETTINGUP_GAME :{BLACK}Spill gëtt opgestallt STR_GENERATION_SETTINGUP_GAME :{BLACK}Spill gëtt opgestallt
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Felder-Verdeelung STR_GENERATION_PREPARING_TILELOOP :{BLACK}Felder-Verdeelung
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lafende Script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lafende Script

@ -2587,9 +2587,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% s
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Penjanaan dunia STR_GENERATION_WORLD_GENERATION :{BLACK}Penjanaan dunia
STR_GENERATION_RIVER_GENERATION :{BLACK}Penjanaan sungai STR_GENERATION_RIVER_GENERATION :{BLACK}Penjanaan sungai
STR_GENERATION_TREE_GENERATION :{BLACK}Penjanaan pokok
STR_GENERATION_OBJECT_GENERATION :{BLACK}Penjanaan objek-objek yang tidak boleh digerakkan
STR_GENERATION_CLEARING_TILES :{BLACK}Penjanaan kawasan berbatu dan tanah kasar STR_GENERATION_CLEARING_TILES :{BLACK}Penjanaan kawasan berbatu dan tanah kasar
STR_GENERATION_OBJECT_GENERATION :{BLACK}Penjanaan objek-objek yang tidak boleh digerakkan
STR_GENERATION_TREE_GENERATION :{BLACK}Penjanaan pokok
STR_GENERATION_SETTINGUP_GAME :{BLACK}Permainan sedang diuruskan STR_GENERATION_SETTINGUP_GAME :{BLACK}Permainan sedang diuruskan
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lingkaran petak sedang dijalankan STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lingkaran petak sedang dijalankan
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skrip sedang berjalan STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skrip sedang berjalan

@ -3395,10 +3395,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vil du
STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% ferdig STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% ferdig
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generer en verden STR_GENERATION_WORLD_GENERATION :{BLACK}Generer en verden
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskapsgenerering
STR_GENERATION_RIVER_GENERATION :{BLACK}Skap elver STR_GENERATION_RIVER_GENERATION :{BLACK}Skap elver
STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektgenerering
STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område
STR_GENERATION_TOWN_GENERATION :{BLACK}Bygenerering
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Industrigenerering
STR_GENERATION_OBJECT_GENERATION :{BLACK}Objektgenerering
STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering
STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjør spillet STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjør spillet
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kjører ruteløkke STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kjører ruteløkke
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjører skript STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjører skript
@ -5288,6 +5291,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Endre di
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen kjøretøyer er tilgjengelig ennå STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ingen kjøretøyer er tilgjengelig ennå
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starte et nytt spill etter {DATE_SHORT}, eller bruke en NewGRF som inneholder tidlige kjøretøy STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Starte et nytt spill etter {DATE_SHORT}, eller bruke en NewGRF som inneholder tidlige kjøretøy
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Ingen veityper som kan bygges i byer er tilgjengelig
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Endre NewGRF-innstillingene dine
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Ingen veityper som kan bygges i byer er tilgjengelig ennå
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Start et nytt spill etter {DATE_SHORT} eller bruk en NewGRF som tilbyr tidlige veityper som kan bygges av byer
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke tvinge tog til å passere signal ved fare... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke tvinge tog til å passere signal ved fare...

@ -2757,9 +2757,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generer ei verd STR_GENERATION_WORLD_GENERATION :{BLACK}Generer ei verd
STR_GENERATION_RIVER_GENERATION :{BLACK}Elvgenerering STR_GENERATION_RIVER_GENERATION :{BLACK}Elvgenerering
STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikkje-flyttbar generering
STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område STR_GENERATION_CLEARING_TILES :{BLACK}Generering av ulendt og steinete område
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikkje-flyttbar generering
STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering
STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjer spelet STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjer spelet
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Køyrer rute-løkkje STR_GENERATION_PREPARING_TILELOOP :{BLACK}Køyrer rute-løkkje
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjøyrande script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjøyrande script

@ -2588,9 +2588,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}ساخت دنیا STR_GENERATION_WORLD_GENERATION :{BLACK}ساخت دنیا
STR_GENERATION_RIVER_GENERATION :{BLACK}ساخت رودخانه STR_GENERATION_RIVER_GENERATION :{BLACK}ساخت رودخانه
STR_GENERATION_TREE_GENERATION :{BLACK}ساختن درخت
STR_GENERATION_OBJECT_GENERATION :{BLACK}ساختن اشیاء
STR_GENERATION_CLEARING_TILES :{BLACK}ساختن مناطق ناهموار و صخره ها STR_GENERATION_CLEARING_TILES :{BLACK}ساختن مناطق ناهموار و صخره ها
STR_GENERATION_OBJECT_GENERATION :{BLACK}ساختن اشیاء
STR_GENERATION_TREE_GENERATION :{BLACK}ساختن درخت
STR_GENERATION_SETTINGUP_GAME :{BLACK}راه اندازی بازی STR_GENERATION_SETTINGUP_GAME :{BLACK}راه اندازی بازی
STR_GENERATION_PREPARING_TILELOOP :{BLACK}اجرای حلقه قطعه ها STR_GENERATION_PREPARING_TILELOOP :{BLACK}اجرای حلقه قطعه ها
STR_GENERATION_PREPARING_SCRIPT :{BLACK}کدهای در حال اجرا STR_GENERATION_PREPARING_SCRIPT :{BLACK}کدهای در حال اجرا

@ -3773,11 +3773,14 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Czy na
STR_GENERATION_PROGRESS :{WHITE}Ukończono w {NUM}% STR_GENERATION_PROGRESS :{WHITE}Ukończono w {NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Tworzenie świata STR_GENERATION_WORLD_GENERATION :{BLACK}Tworzenie świata
STR_GENERATION_RIVER_GENERATION :{BLACK}Generator rzek STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Tworzenie krajobrazu
STR_GENERATION_TREE_GENERATION :{BLACK}Tworzenie drzew STR_GENERATION_RIVER_GENERATION :{BLACK}Tworzenie rzek
STR_GENERATION_OBJECT_GENERATION :{BLACK}Tworzenie obiektów
STR_GENERATION_CLEARING_TILES :{BLACK}Tworzenie terenów skalistych i nierówności STR_GENERATION_CLEARING_TILES :{BLACK}Tworzenie terenów skalistych i nierówności
STR_GENERATION_SETTINGUP_GAME :{BLACK}Ustawianie gry STR_GENERATION_TOWN_GENERATION :{BLACK}Tworzenie miast
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Rozmieszczanie przedsiębiorstw
STR_GENERATION_OBJECT_GENERATION :{BLACK}Rozmieszczanie obiektów
STR_GENERATION_TREE_GENERATION :{BLACK}Rozmieszczanie drzew
STR_GENERATION_SETTINGUP_GAME :{BLACK}Konfigurowanie rozgrywki
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Uaktywnianie pól STR_GENERATION_PREPARING_TILELOOP :{BLACK}Uaktywnianie pól
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Uruchamianie skryptu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Uruchamianie skryptu
STR_GENERATION_PREPARING_GAME :{BLACK}Przygotowywanie gry STR_GENERATION_PREPARING_GAME :{BLACK}Przygotowywanie gry

@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Quer me
STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}A gerar mundo STR_GENERATION_WORLD_GENERATION :{BLACK}A gerar mundo
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Geração de paisagem
STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar rios STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar rios
STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores
STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração inamovível
STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas
STR_GENERATION_TOWN_GENERATION :{BLACK}Geração de localidades
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Geração de indústrias
STR_GENERATION_OBJECT_GENERATION :{BLACK}Geração inamovível
STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores
STR_GENERATION_SETTINGUP_GAME :{BLACK}Definindo jogo STR_GENERATION_SETTINGUP_GAME :{BLACK}Definindo jogo
STR_GENERATION_PREPARING_TILELOOP :{BLACK}A preparar o terreno STR_GENERATION_PREPARING_TILELOOP :{BLACK}A preparar o terreno
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script a correr STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script a correr

@ -3387,9 +3387,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% e
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generare lume STR_GENERATION_WORLD_GENERATION :{BLACK}Generare lume
STR_GENERATION_RIVER_GENERATION :{BLACK}Generarea râurilor STR_GENERATION_RIVER_GENERATION :{BLACK}Generarea râurilor
STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generare fixă
STR_GENERATION_CLEARING_TILES :{BLACK}Generare zonă dură și pietroasă STR_GENERATION_CLEARING_TILES :{BLACK}Generare zonă dură și pietroasă
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generare fixă
STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori
STR_GENERATION_SETTINGUP_GAME :{BLACK}Se configurează jocul STR_GENERATION_SETTINGUP_GAME :{BLACK}Se configurează jocul
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Initializez ciclul dalelor STR_GENERATION_PREPARING_TILELOOP :{BLACK}Initializez ciclul dalelor
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Se rulează script-ul STR_GENERATION_PREPARING_SCRIPT :{BLACK}Se rulează script-ul

@ -3568,10 +3568,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Вы д
STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Создание мира STR_GENERATION_WORLD_GENERATION :{BLACK}Создание мира
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Создание ландшафта
STR_GENERATION_RIVER_GENERATION :{BLACK}Создание рек STR_GENERATION_RIVER_GENERATION :{BLACK}Создание рек
STR_GENERATION_TREE_GENERATION :{BLACK}Высадка лесов
STR_GENERATION_OBJECT_GENERATION :{BLACK}Создание объектов
STR_GENERATION_CLEARING_TILES :{BLACK}Расстановка декораций и камней STR_GENERATION_CLEARING_TILES :{BLACK}Расстановка декораций и камней
STR_GENERATION_TOWN_GENERATION :{BLACK}Создание городов
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Создание предприятий
STR_GENERATION_OBJECT_GENERATION :{BLACK}Создание объектов
STR_GENERATION_TREE_GENERATION :{BLACK}Высадка лесов
STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Подготовка к запуску... STR_GENERATION_PREPARING_TILELOOP :{BLACK}Подготовка к запуску...
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выполняется скрипт STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выполняется скрипт

@ -3520,9 +3520,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% z
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Stvaranje sveta STR_GENERATION_WORLD_GENERATION :{BLACK}Stvaranje sveta
STR_GENERATION_RIVER_GENERATION :{BLACK}Određivanje toka reka STR_GENERATION_RIVER_GENERATION :{BLACK}Određivanje toka reka
STR_GENERATION_TREE_GENERATION :{BLACK}Postavljanje drveća
STR_GENERATION_OBJECT_GENERATION :{BLACK}Postavljenje nepomičnih objekata
STR_GENERATION_CLEARING_TILES :{BLACK}Dodavanje grubih i stenovitih područja STR_GENERATION_CLEARING_TILES :{BLACK}Dodavanje grubih i stenovitih područja
STR_GENERATION_OBJECT_GENERATION :{BLACK}Postavljenje nepomičnih objekata
STR_GENERATION_TREE_GENERATION :{BLACK}Postavljanje drveća
STR_GENERATION_SETTINGUP_GAME :{BLACK}Podešavanje igre STR_GENERATION_SETTINGUP_GAME :{BLACK}Podešavanje igre
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Razrađivanje pločica STR_GENERATION_PREPARING_TILELOOP :{BLACK}Razrađivanje pločica
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Pokretanje skripte STR_GENERATION_PREPARING_SCRIPT :{BLACK}Pokretanje skripte

@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}已完
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}地图生成 STR_GENERATION_WORLD_GENERATION :{BLACK}地图生成
STR_GENERATION_RIVER_GENERATION :{BLACK}生成河流 STR_GENERATION_RIVER_GENERATION :{BLACK}生成河流
STR_GENERATION_TREE_GENERATION :{BLACK}生成树木
STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施
STR_GENERATION_CLEARING_TILES :{BLACK}生成岩石地貌 STR_GENERATION_CLEARING_TILES :{BLACK}生成岩石地貌
STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施
STR_GENERATION_TREE_GENERATION :{BLACK}生成树木
STR_GENERATION_SETTINGUP_GAME :{BLACK}设置游戏 STR_GENERATION_SETTINGUP_GAME :{BLACK}设置游戏
STR_GENERATION_PREPARING_TILELOOP :{BLACK}地貌细节生成 STR_GENERATION_PREPARING_TILELOOP :{BLACK}地貌细节生成
STR_GENERATION_PREPARING_SCRIPT :{BLACK}当前脚本 STR_GENERATION_PREPARING_SCRIPT :{BLACK}当前脚本

@ -3462,9 +3462,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% h
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generovanie sveta STR_GENERATION_WORLD_GENERATION :{BLACK}Generovanie sveta
STR_GENERATION_RIVER_GENERATION :{BLACK}Generovanie riek STR_GENERATION_RIVER_GENERATION :{BLACK}Generovanie riek
STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generovanie objektov
STR_GENERATION_CLEARING_TILES :{BLACK}Generovanie nerovností a skál STR_GENERATION_CLEARING_TILES :{BLACK}Generovanie nerovností a skál
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generovanie objektov
STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov
STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavovanie hry STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavovanie hry
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spúšťanie políčkového cyklu STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spúšťanie políčkového cyklu
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Spúšťanie skriptu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Spúšťanie skriptu

@ -2995,9 +2995,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% n
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Ustvarjanje sveta STR_GENERATION_WORLD_GENERATION :{BLACK}Ustvarjanje sveta
STR_GENERATION_RIVER_GENERATION :{BLACK}Ustvarjanje reke STR_GENERATION_RIVER_GENERATION :{BLACK}Ustvarjanje reke
STR_GENERATION_TREE_GENERATION :{BLACK}Ustvarjanje dreves
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ustvarjanje zgradbe
STR_GENERATION_CLEARING_TILES :{BLACK}Generiranje grobih in skalnatih tal STR_GENERATION_CLEARING_TILES :{BLACK}Generiranje grobih in skalnatih tal
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ustvarjanje zgradbe
STR_GENERATION_TREE_GENERATION :{BLACK}Ustvarjanje dreves
STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavljanje igre STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavljanje igre
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Zagnano ponavljanje polj STR_GENERATION_PREPARING_TILELOOP :{BLACK}Zagnano ponavljanje polj
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Poganjam skripto STR_GENERATION_PREPARING_SCRIPT :{BLACK}Poganjam skripto

@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mundo STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mundo
STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos
STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de inamovibles
STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas ásperas o rocosas STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas ásperas o rocosas
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de inamovibles
STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles
STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurar juego STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurar juego
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ejecutar ciclo de casillas STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ejecutar ciclo de casillas
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script en funcionamiento STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script en funcionamiento

@ -3326,9 +3326,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mapa STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mapa
STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos
STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de objetos
STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas rugosas y rocosas STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas rugosas y rocosas
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de objetos
STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles
STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida STR_GENERATION_SETTINGUP_GAME :{BLACK}Configurando partida
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generando casillas STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generando casillas
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ejecutando script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ejecutando script

@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld
STR_GENERATION_RIVER_GENERATION :{BLACK}Generera Flod STR_GENERATION_RIVER_GENERATION :{BLACK}Generera Flod
STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt
STR_GENERATION_CLEARING_TILES :{BLACK}Svår och stenig markgenerering STR_GENERATION_CLEARING_TILES :{BLACK}Svår och stenig markgenerering
STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt
STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd
STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kör tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kör tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kör skript STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kör skript

@ -3108,9 +3108,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}உலகம் உருவாக்குதல் STR_GENERATION_WORLD_GENERATION :{BLACK}உலகம் உருவாக்குதல்
STR_GENERATION_RIVER_GENERATION :{BLACK}ஆறு உருவாக்குதல் STR_GENERATION_RIVER_GENERATION :{BLACK}ஆறு உருவாக்குதல்
STR_GENERATION_TREE_GENERATION :{BLACK}மரங்கள் உருவாக்குதல்
STR_GENERATION_OBJECT_GENERATION :{BLACK}பொருள் உருவாக்குதல்
STR_GENERATION_CLEARING_TILES :{BLACK}சமமில்லாத மற்றும் கல்லான பகுதி உருவாக்குதல் STR_GENERATION_CLEARING_TILES :{BLACK}சமமில்லாத மற்றும் கல்லான பகுதி உருவாக்குதல்
STR_GENERATION_OBJECT_GENERATION :{BLACK}பொருள் உருவாக்குதல்
STR_GENERATION_TREE_GENERATION :{BLACK}மரங்கள் உருவாக்குதல்
STR_GENERATION_SETTINGUP_GAME :{BLACK}ஆட்டம் அமைக்கப்படுகின்றது STR_GENERATION_SETTINGUP_GAME :{BLACK}ஆட்டம் அமைக்கப்படுகின்றது
STR_GENERATION_PREPARING_SCRIPT :{BLACK}வரிவடிவம் செயல்படுத்தப்படுகின்றது STR_GENERATION_PREPARING_SCRIPT :{BLACK}வரிவடிவம் செயல்படுத்தப்படுகின்றது
STR_GENERATION_PREPARING_GAME :{BLACK}ஆட்டம் தயாராகிறது STR_GENERATION_PREPARING_GAME :{BLACK}ஆட்டம் தயாராகிறது

@ -2930,9 +2930,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}เครื่องมือสร้างแผนที่ STR_GENERATION_WORLD_GENERATION :{BLACK}เครื่องมือสร้างแผนที่
STR_GENERATION_RIVER_GENERATION :{BLACK}สร้างแม่น้ำ STR_GENERATION_RIVER_GENERATION :{BLACK}สร้างแม่น้ำ
STR_GENERATION_TREE_GENERATION :{BLACK}สร้างต้นไม่
STR_GENERATION_OBJECT_GENERATION :{BLACK}สร้างวัตถุ
STR_GENERATION_CLEARING_TILES :{BLACK}สร้างพื้นหิน STR_GENERATION_CLEARING_TILES :{BLACK}สร้างพื้นหิน
STR_GENERATION_OBJECT_GENERATION :{BLACK}สร้างวัตถุ
STR_GENERATION_TREE_GENERATION :{BLACK}สร้างต้นไม่
STR_GENERATION_SETTINGUP_GAME :{BLACK}ตั้งค่าให้กับเกม STR_GENERATION_SETTINGUP_GAME :{BLACK}ตั้งค่าให้กับเกม
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script

@ -3280,9 +3280,9 @@ STR_GENERATION_PROGRESS :{WHITE}完成 {
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}產生世界 STR_GENERATION_WORLD_GENERATION :{BLACK}產生世界
STR_GENERATION_RIVER_GENERATION :{BLACK}產生河流 STR_GENERATION_RIVER_GENERATION :{BLACK}產生河流
STR_GENERATION_TREE_GENERATION :{BLACK}產生樹木
STR_GENERATION_OBJECT_GENERATION :{BLACK}無法移動
STR_GENERATION_CLEARING_TILES :{BLACK}產生粗地與岩石區域 STR_GENERATION_CLEARING_TILES :{BLACK}產生粗地與岩石區域
STR_GENERATION_OBJECT_GENERATION :{BLACK}無法移動
STR_GENERATION_TREE_GENERATION :{BLACK}產生樹木
STR_GENERATION_SETTINGUP_GAME :{BLACK}設定遊戲 STR_GENERATION_SETTINGUP_GAME :{BLACK}設定遊戲
STR_GENERATION_PREPARING_TILELOOP :{BLACK}執行單格迴圈中 STR_GENERATION_PREPARING_TILELOOP :{BLACK}執行單格迴圈中
STR_GENERATION_PREPARING_SCRIPT :{BLACK}正在運行腳本 STR_GENERATION_PREPARING_SCRIPT :{BLACK}正在運行腳本

@ -2602,6 +2602,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :geçersiz ya da
STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :yanlış düzeltme STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :yanlış düzeltme
STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isim kullanımda STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isim kullanımda
STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :yanlış parola STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :yanlış parola
STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :izin verilenler listesinde değil
STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :DoCommand için yanlış company-id STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :DoCommand için yanlış company-id
STR_NETWORK_ERROR_CLIENT_KICKED :sunucu tarafından atıldı STR_NETWORK_ERROR_CLIENT_KICKED :sunucu tarafından atıldı
STR_NETWORK_ERROR_CLIENT_CHEATER :hile yapmaya çalıştı STR_NETWORK_ERROR_CLIENT_CHEATER :hile yapmaya çalıştı
@ -3392,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Oluştu
STR_GENERATION_PROGRESS :{WHITE}%{NUM} tamamlandı STR_GENERATION_PROGRESS :{WHITE}%{NUM} tamamlandı
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Harita üretimi STR_GENERATION_WORLD_GENERATION :{BLACK}Harita üretimi
STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Peyzaj oluşumu
STR_GENERATION_RIVER_GENERATION :{BLACK}Nehir oluşturma STR_GENERATION_RIVER_GENERATION :{BLACK}Nehir oluşturma
STR_GENERATION_TREE_GENERATION :{BLACK}Ağaç üretimi
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nesne oluşturma
STR_GENERATION_CLEARING_TILES :{BLACK}Engebeli ve kayalık alan oluştur STR_GENERATION_CLEARING_TILES :{BLACK}Engebeli ve kayalık alan oluştur
STR_GENERATION_TOWN_GENERATION :{BLACK}Kasaba Oluşumu
STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Endüstri Oluşumu
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nesne oluşturma
STR_GENERATION_TREE_GENERATION :{BLACK}Ağaç üretimi
STR_GENERATION_SETTINGUP_GAME :{BLACK}Oyun ayarlanıyor STR_GENERATION_SETTINGUP_GAME :{BLACK}Oyun ayarlanıyor
STR_GENERATION_PREPARING_TILELOOP :{BLACK}tile-loop çalıştırılıyor STR_GENERATION_PREPARING_TILELOOP :{BLACK}tile-loop çalıştırılıyor
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Betik çalıştırılıyor STR_GENERATION_PREPARING_SCRIPT :{BLACK}Betik çalıştırılıyor
@ -3487,6 +3491,7 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Yol türü:
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF değişkeni 60+x parametresi (onaltılı) STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF değişkeni 60+x parametresi (onaltılı)
# Sprite aligner window # Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Hizalanan Görüntü: ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sonraki nesne STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sonraki nesne
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Tüm sahte/yeniden renklendirme/yazı tipi nesnelerini ve sondaki nesneden atlayarak bir sonraki normal nesneye geç STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Tüm sahte/yeniden renklendirme/yazı tipi nesnelerini ve sondaki nesneden atlayarak bir sonraki normal nesneye geç
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nesneye git STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nesneye git
@ -5279,6 +5284,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Yeni New
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Henüz hiçbir araç kullanılabilir değil STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Henüz hiçbir araç kullanılabilir değil
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT} sonra yeni bir oyun başlat veya erken araç sağlayan NewGRF kullan STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}{DATE_SHORT} sonra yeni bir oyun başlat veya erken araç sağlayan NewGRF kullan
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Kasabada inşa edilebilir yol türleri mevcut değil
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}NewGRF Yapılandırma Ayarlarını Değiştir
# Specific vehicle errors # Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tehlikedeki tren sinyali geçemez... STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tehlikedeki tren sinyali geçemez...

@ -3534,9 +3534,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}%
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Створення світу STR_GENERATION_WORLD_GENERATION :{BLACK}Створення світу
STR_GENERATION_RIVER_GENERATION :{BLACK}Генерація річок STR_GENERATION_RIVER_GENERATION :{BLACK}Генерація річок
STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев
STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості
STR_GENERATION_CLEARING_TILES :{BLACK}Розкидати каміння STR_GENERATION_CLEARING_TILES :{BLACK}Розкидати каміння
STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості
STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев
STR_GENERATION_SETTINGUP_GAME :{BLACK}Налаштування гри STR_GENERATION_SETTINGUP_GAME :{BLACK}Налаштування гри
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Виконуємо цикл STR_GENERATION_PREPARING_TILELOOP :{BLACK}Виконуємо цикл
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Виконується скрипт STR_GENERATION_PREPARING_SCRIPT :{BLACK}Виконується скрипт

@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% h
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Tạo màn STR_GENERATION_WORLD_GENERATION :{BLACK}Tạo màn
STR_GENERATION_RIVER_GENERATION :{BLACK}Khởi tạo sông suối STR_GENERATION_RIVER_GENERATION :{BLACK}Khởi tạo sông suối
STR_GENERATION_TREE_GENERATION :{BLACK}Trồng cây
STR_GENERATION_OBJECT_GENERATION :{BLACK}Sinh đối tượng cứng
STR_GENERATION_CLEARING_TILES :{BLACK}Sinh đá và sự gồ ghề STR_GENERATION_CLEARING_TILES :{BLACK}Sinh đá và sự gồ ghề
STR_GENERATION_OBJECT_GENERATION :{BLACK}Sinh đối tượng cứng
STR_GENERATION_TREE_GENERATION :{BLACK}Trồng cây
STR_GENERATION_SETTINGUP_GAME :{BLACK}Thiết lập ván chơi STR_GENERATION_SETTINGUP_GAME :{BLACK}Thiết lập ván chơi
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Đang chạy sinh tile STR_GENERATION_PREPARING_TILELOOP :{BLACK}Đang chạy sinh tile
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Đang chạy tập lệnh STR_GENERATION_PREPARING_SCRIPT :{BLACK}Đang chạy tập lệnh

@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c
STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM}
STR_GENERATION_WORLD_GENERATION :{BLACK}Cynhyrchu byd STR_GENERATION_WORLD_GENERATION :{BLACK}Cynhyrchu byd
STR_GENERATION_RIVER_GENERATION :{BLACK}Cynhyrchu afonydd STR_GENERATION_RIVER_GENERATION :{BLACK}Cynhyrchu afonydd
STR_GENERATION_TREE_GENERATION :{BLACK}Cynhyrchu coed
STR_GENERATION_OBJECT_GENERATION :{BLACK}Cynhyrchu gwrthrych
STR_GENERATION_CLEARING_TILES :{BLACK}Cynhyrchu ardaloedd creigiog a chnapiog STR_GENERATION_CLEARING_TILES :{BLACK}Cynhyrchu ardaloedd creigiog a chnapiog
STR_GENERATION_OBJECT_GENERATION :{BLACK}Cynhyrchu gwrthrych
STR_GENERATION_TREE_GENERATION :{BLACK}Cynhyrchu coed
STR_GENERATION_SETTINGUP_GAME :{BLACK}Gosod gêm yn ei le STR_GENERATION_SETTINGUP_GAME :{BLACK}Gosod gêm yn ei le
STR_GENERATION_PREPARING_TILELOOP :{BLACK}Rhedeg dolen teiliau STR_GENERATION_PREPARING_TILELOOP :{BLACK}Rhedeg dolen teiliau
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rhedeg sgript STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rhedeg sgript

@ -20,7 +20,7 @@ bool IsValidLink(Link link);
typedef Pool<LeagueTableElement, LeagueTableElementID, 64, 64000> LeagueTableElementPool; typedef Pool<LeagueTableElement, LeagueTableElementID, 64, 64000> LeagueTableElementPool;
extern LeagueTableElementPool _league_table_element_pool; extern LeagueTableElementPool _league_table_element_pool;
typedef Pool<LeagueTable, LeagueTableID, 4, 256> LeagueTablePool; typedef Pool<LeagueTable, LeagueTableID, 4, 255> LeagueTablePool;
extern LeagueTablePool _league_table_pool; extern LeagueTablePool _league_table_pool;

@ -293,7 +293,7 @@ private:
for (uint i = 0; i != elements.size(); i++) { for (uint i = 0; i != elements.size(); i++) {
auto *lte = elements[i]; auto *lte = elements[i];
if (i > 0 && elements[i - 1]->rating != lte->rating) rank = i; if (i > 0 && elements[i - 1]->rating != lte->rating) rank = i;
this->rows.emplace_back(std::make_pair(rank, lte)); this->rows.emplace_back(rank, lte);
} }
} }

@ -36,7 +36,7 @@ template <typename T, size_t N> struct ArrayT<T[N]> {
template <typename E, typename T> template <typename E, typename T>
inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::Item t_unk) inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::Item t_unk)
{ {
if ((size_t)idx >= ArrayT<T>::length) { if (static_cast<size_t>(idx) >= ArrayT<T>::length) {
return t_unk; return t_unk;
} }
return t[idx]; return t[idx];
@ -50,7 +50,7 @@ inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::I
template <typename E, typename T> template <typename E, typename T>
inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::Item t_unk, E idx_inv, typename ArrayT<T>::Item t_inv) inline typename ArrayT<T>::Item ItemAtT(E idx, const T &t, typename ArrayT<T>::Item t_unk, E idx_inv, typename ArrayT<T>::Item t_inv)
{ {
if ((size_t)idx < ArrayT<T>::length) { if (static_cast<size_t>(idx) < ArrayT<T>::length) {
return t[idx]; return t[idx];
} }
if (idx == idx_inv) { if (idx == idx_inv) {

@ -74,7 +74,7 @@ public:
} }
/* Insert new item. */ /* Insert new item. */
this->data.push_front(std::make_pair(key, item)); this->data.emplace_front(key, item);
this->lookup.emplace(key, this->data.begin()); this->lookup.emplace(key, this->data.begin());
} }

@ -54,7 +54,7 @@ static constexpr NWidgetPart _nested_land_info_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_LI_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_LI_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP),
NWidget(WWT_DEBUGBOX, COLOUR_GREY), NWidget(WWT_DEBUGBOX, COLOUR_GREY),
EndContainer(), EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY, WID_LI_BACKGROUND), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_LI_BACKGROUND), EndContainer(),

@ -177,8 +177,8 @@ size_t Packet::ReadRawPacketSize() const
bool Packet::ParsePacketSize() bool Packet::ParsePacketSize()
{ {
assert(this->cs != nullptr); assert(this->cs != nullptr);
size_t size = (size_t)this->buffer[0]; size_t size = static_cast<size_t>(this->buffer[0]);
size += (size_t)this->buffer[1] << 8; size += static_cast<size_t>(this->buffer[1]) << 8;
/* If the size of the packet is less than the bytes required for the size and type of /* If the size of the packet is less than the bytes required for the size and type of
* the packet, or more than the allowed limit, then something is wrong with the packet. * the packet, or more than the allowed limit, then something is wrong with the packet.

@ -165,7 +165,7 @@ void NetworkUDPSocketHandler::ReceivePackets()
/* If the size does not match the packet must be corrupted. /* If the size does not match the packet must be corrupted.
* Otherwise it will be marked as corrupted later on. */ * Otherwise it will be marked as corrupted later on. */
if (!p.ParsePacketSize() || (size_t)nbytes != p.Size()) { if (!p.ParsePacketSize() || static_cast<size_t>(nbytes) != p.Size()) {
DEBUG(net, 1, "received a packet with mismatching size from %s, (%u, %u)", NetworkAddressDumper().GetAddressAsString(&address), (uint)nbytes, (uint)p.Size()); DEBUG(net, 1, "received a packet with mismatching size from %s, (%u, %u)", NetworkAddressDumper().GetAddressAsString(&address), (uint)nbytes, (uint)p.Size());
continue; continue;
} }

@ -448,7 +448,7 @@ static bool GunzipFile(const ContentInfo *ci)
if (errnum != 0 && errnum != Z_STREAM_END) ret = false; if (errnum != 0 && errnum != Z_STREAM_END) ret = false;
break; break;
} }
if (read < 0 || (size_t)read != fwrite(buff, 1, read, fout)) { if (read < 0 || static_cast<size_t>(read) != fwrite(buff, 1, read, fout)) {
/* If gzread() returns -1, there was an error in archive */ /* If gzread() returns -1, there was an error in archive */
ret = false; ret = false;
break; break;
@ -502,7 +502,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet &p)
} else { } else {
/* We have a file opened, thus are downloading internal content */ /* We have a file opened, thus are downloading internal content */
size_t toRead = p.RemainingBytesToTransfer(); size_t toRead = p.RemainingBytesToTransfer();
if (toRead != 0 && (size_t)p.TransferOut(TransferOutFWrite, this->curFile) != toRead) { if (toRead != 0 && static_cast<size_t>(p.TransferOut(TransferOutFWrite, this->curFile)) != toRead) {
CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD); CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD);
ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR);
this->CloseConnection(); this->CloseConnection();

@ -132,6 +132,7 @@ public:
} }
this->smallest_x = this->children.front()->smallest_x + this->children.back()->smallest_x; // First and last are always shown, rest not this->smallest_x = this->children.front()->smallest_x + this->children.back()->smallest_x; // First and last are always shown, rest not
this->ApplyAspectRatio();
} }
void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
@ -1195,18 +1196,18 @@ static constexpr NWidgetPart _nested_network_start_server_window_widgets[] = {
NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0),
NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS, STR_NULL), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS, STR_NULL),
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTND), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_CLIENTS_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_CLIENTS_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP),
NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTNU), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0),
NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES, STR_NULL), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES, STR_NULL),
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTND), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_COMPANIES_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_COMPANIES_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP),
NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
@ -1267,7 +1268,7 @@ static constexpr NWidgetPart _nested_client_list_widgets[] = {
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL),
NWidget(NWID_SPACER), SetMinimalSize(10, 0), NWidget(NWID_SPACER), SetMinimalSize(10, 0),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP),
EndContainer(), EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR),
NWidget(NWID_VERTICAL), NWidget(NWID_VERTICAL),
@ -1294,7 +1295,7 @@ static constexpr NWidgetPart _nested_client_list_widgets[] = {
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL),
NWidget(NWID_SPACER), SetMinimalSize(10, 0), NWidget(NWID_SPACER), SetMinimalSize(10, 0),
NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),

@ -277,7 +277,7 @@ struct GRFLocation {
} }
}; };
static btree::btree_map<GRFLocation, SpriteID> _grm_sprites; static btree::btree_map<GRFLocation, std::pair<SpriteID, uint16_t>> _grm_sprites;
typedef btree::btree_map<GRFLocation, std::unique_ptr<uint8_t[]>> GRFLineToSpriteOverride; typedef btree::btree_map<GRFLocation, std::unique_ptr<uint8_t[]>> GRFLineToSpriteOverride;
static GRFLineToSpriteOverride _grf_line_to_action6_sprite_override; static GRFLineToSpriteOverride _grf_line_to_action6_sprite_override;
static bool _action6_override_active = false; static bool _action6_override_active = false;
@ -2583,7 +2583,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, con
/* Check if the cargo types should not be changed */ /* Check if the cargo types should not be changed */
if (cargotypes == 0xFFFFFFFF) break; if (cargotypes == 0xFFFFFFFF) break;
for (uint j = 0; j < 3; j++) { for (uint j = 0; j < HOUSE_ORIGINAL_NUM_ACCEPTS; j++) {
/* Get the cargo number from the 'list' */ /* Get the cargo number from the 'list' */
uint8_t cargo_part = GB(cargotypes, 8 * j, 8); uint8_t cargo_part = GB(cargotypes, 8 * j, 8);
CargoID cargo = GetCargoTranslation(cargo_part, _cur.grffile); CargoID cargo = GetCargoTranslation(cargo_part, _cur.grffile);
@ -2594,6 +2594,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, con
} else { } else {
housespec->accepts_cargo[j] = cargo; housespec->accepts_cargo[j] = cargo;
} }
housespec->accepts_cargo_label[j] = CT_INVALID;
} }
break; break;
} }
@ -3373,6 +3374,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr
uint16_t acctp = buf->ReadWord(); uint16_t acctp = buf->ReadWord();
tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile); tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile);
tsp->acceptance[prop - 0x0A] = Clamp(GB(acctp, 8, 8), 0, 16); tsp->acceptance[prop - 0x0A] = Clamp(GB(acctp, 8, 8), 0, 16);
tsp->accepts_cargo_label[prop - 0x0A] = CT_INVALID;
break; break;
} }
@ -3459,14 +3461,14 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf)
case 0x0C: case 0x0C:
case 0x0D: case 0x0D:
case 0x0E: case 0x0E:
case 0x10: case 0x10: // INDUSTRY_ORIGINAL_NUM_OUTPUTS bytes
case 0x1B: case 0x1B:
case 0x1F: case 0x1F:
case 0x24: case 0x24:
buf->ReadWord(); buf->ReadWord();
break; break;
case 0x11: case 0x11: // INDUSTRY_ORIGINAL_NUM_INPUTS bytes + 1
case 0x1A: case 0x1A:
case 0x1C: case 0x1C:
case 0x1D: case 0x1D:
@ -3498,7 +3500,7 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf)
} }
case 0x16: case 0x16:
for (uint8_t j = 0; j < 3; j++) buf->ReadByte(); for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) buf->ReadByte();
break; break;
case 0x15: case 0x15:
@ -3746,14 +3748,14 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
break; break;
case 0x10: // Production cargo types case 0x10: // Production cargo types
for (uint8_t j = 0; j < 2; j++) { for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_OUTPUTS; j++) {
indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile);
indsp->produced_cargo_label[j] = CT_INVALID; indsp->produced_cargo_label[j] = CT_INVALID;
} }
break; break;
case 0x11: // Acceptance cargo types case 0x11: // Acceptance cargo types
for (uint8_t j = 0; j < 3; j++) { for (uint8_t j = 0; j < INDUSTRY_ORIGINAL_NUM_INPUTS; j++) {
indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile);
indsp->accepts_cargo_label[j] = CT_INVALID; indsp->accepts_cargo_label[j] = CT_INVALID;
} }
@ -6300,22 +6302,22 @@ static void NewSpriteGroup(ByteReader *buf)
act_group = group; act_group = group;
group->version = type; group->version = type;
if (type == 0) { if (type == 0) {
group->num_input = 3; group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS;
for (uint i = 0; i < 3; i++) { for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) {
group->subtract_input[i] = (int16_t)buf->ReadWord(); // signed group->subtract_input[i] = (int16_t)buf->ReadWord(); // signed
} }
group->num_output = 2; group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS;
for (uint i = 0; i < 2; i++) { for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) {
group->add_output[i] = buf->ReadWord(); // unsigned group->add_output[i] = buf->ReadWord(); // unsigned
} }
group->again = buf->ReadByte(); group->again = buf->ReadByte();
} else if (type == 1) { } else if (type == 1) {
group->num_input = 3; group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS;
for (uint i = 0; i < 3; i++) { for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) {
group->subtract_input[i] = buf->ReadByte(); group->subtract_input[i] = buf->ReadByte();
} }
group->num_output = 2; group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS;
for (uint i = 0; i < 2; i++) { for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) {
group->add_output[i] = buf->ReadByte(); group->add_output[i] = buf->ReadByte();
} }
group->again = buf->ReadByte(); group->again = buf->ReadByte();
@ -8028,6 +8030,21 @@ static void GRFInfo(ByteReader *buf)
Debug(grf, 1, "GRFInfo: Loaded GRFv{} set {:08X} - {} (palette: {}, version: {})", version, BSWAP32(grfid), StrMakeValid(name), (_cur.grfconfig->palette & GRFP_USE_MASK) ? "Windows" : "DOS", _cur.grfconfig->version); Debug(grf, 1, "GRFInfo: Loaded GRFv{} set {:08X} - {} (palette: {}, version: {})", version, BSWAP32(grfid), StrMakeValid(name), (_cur.grfconfig->palette & GRFP_USE_MASK) ? "Windows" : "DOS", _cur.grfconfig->version);
} }
/**
* Check if a sprite ID range is within the GRM reversed range for the currently loading NewGRF.
* @param first_sprite First sprite of range.
* @param num_sprites Number of sprites in the range.
* @return True iff the NewGRF has reserved a range equal to or greater than the provided range.
*/
static bool IsGRMReservedSprite(SpriteID first_sprite, uint16_t num_sprites)
{
for (const auto &grm_sprite : _grm_sprites) {
if (grm_sprite.first.grfid != _cur.grffile->grfid) continue;
if (grm_sprite.second.first <= first_sprite && grm_sprite.second.first + grm_sprite.second.second >= first_sprite + num_sprites) return true;
}
return false;
}
/* Action 0x0A */ /* Action 0x0A */
static void SpriteReplace(ByteReader *buf) static void SpriteReplace(ByteReader *buf)
{ {
@ -8049,6 +8066,19 @@ static void SpriteReplace(ByteReader *buf)
i, num_sprites, first_sprite i, num_sprites, first_sprite
); );
if (first_sprite + num_sprites >= SPR_OPENTTD_BASE) {
/* Outside allowed range, check for GRM sprite reservations. */
if (!IsGRMReservedSprite(first_sprite, num_sprites)) {
GrfMsg(0, "SpriteReplace: [Set {}] Changing {} sprites, beginning with {}, above limit of {} and not within reserved range, ignoring.",
i, num_sprites, first_sprite, SPR_OPENTTD_BASE);
for (uint j = 0; j < num_sprites; j++) {
LoadNextSprite(-1, *_cur.file, _cur.nfo_line);
}
return;
}
}
for (uint j = 0; j < num_sprites; j++) { for (uint j = 0; j < num_sprites; j++) {
int load_index = first_sprite + j; int load_index = first_sprite + j;
_cur.nfo_line++; _cur.nfo_line++;
@ -8423,7 +8453,7 @@ static void ParamSet(ByteReader *buf)
/* Reserve space at the current sprite ID */ /* Reserve space at the current sprite ID */
GrfMsg(4, "ParamSet: GRM: Allocated {} sprites at {}", count, _cur.spriteid); GrfMsg(4, "ParamSet: GRM: Allocated {} sprites at {}", count, _cur.spriteid);
_grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)] = _cur.spriteid; _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)] = std::make_pair(_cur.spriteid, count);
_cur.spriteid += count; _cur.spriteid += count;
} }
} }
@ -8457,7 +8487,7 @@ static void ParamSet(ByteReader *buf)
switch (op) { switch (op) {
case 0: case 0:
/* Return space reserved during reservation stage */ /* Return space reserved during reservation stage */
src1 = _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)]; src1 = _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)].first;
GrfMsg(4, "ParamSet: GRM: Using pre-allocated sprites at {}", src1); GrfMsg(4, "ParamSet: GRM: Using pre-allocated sprites at {}", src1);
break; break;

@ -219,7 +219,7 @@ uint32_t AirportResolverObject::GetDebugID() const
*/ */
TownScopeResolver *AirportResolverObject::GetTown() TownScopeResolver *AirportResolverObject::GetTown()
{ {
if (!this->town_scope) { if (!this->town_scope.has_value()) {
Town *t = nullptr; Town *t = nullptr;
if (this->airport_scope.st != nullptr) { if (this->airport_scope.st != nullptr) {
t = this->airport_scope.st->town; t = this->airport_scope.st->town;
@ -227,9 +227,9 @@ TownScopeResolver *AirportResolverObject::GetTown()
t = ClosestTownFromTile(this->airport_scope.tile, UINT_MAX); t = ClosestTownFromTile(this->airport_scope.tile, UINT_MAX);
} }
if (t == nullptr) return nullptr; if (t == nullptr) return nullptr;
this->town_scope.reset(new TownScopeResolver(*this, t, this->airport_scope.st == nullptr)); this->town_scope.emplace(*this, t, this->airport_scope.st == nullptr);
} }
return this->town_scope.get(); return &*this->town_scope;
} }
/** /**

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

Loading…
Cancel
Save