diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 826665c3f7..775339d8f3 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -62,7 +62,7 @@ c->ai_info = info; assert(c->ai_instance == nullptr); - c->ai_instance = new AIInstance(); + c->ai_instance = std::make_unique(); c->ai_instance->Initialize(info); c->ai_instance->LoadOnStack(config->GetToLoadData()); config->SetToLoadData(nullptr); @@ -115,8 +115,7 @@ Backup cur_company(_current_company, company, FILE_LINE); Company *c = Company::Get(company); - delete c->ai_instance; - c->ai_instance = nullptr; + c->ai_instance.reset(); c->ai_info = nullptr; c->ai_config.reset(); diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index 230b4d997f..878176a079 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -137,7 +137,7 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { 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(allocator(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width) * sizeof(*dst))); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/blitter/8bpp_simple.cpp b/src/blitter/8bpp_simple.cpp index 379e1c8743..03794561f7 100644 --- a/src/blitter/8bpp_simple.cpp +++ b/src/blitter/8bpp_simple.cpp @@ -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 *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(allocator(sizeof(*dest_sprite) + static_cast(sprite[ZOOM_LVL_MIN].height) * static_cast(sprite[ZOOM_LVL_MIN].width))); dest_sprite->height = sprite[ZOOM_LVL_MIN].height; dest_sprite->width = sprite[ZOOM_LVL_MIN].width; diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 22e86a3dfb..a3e64693bb 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -62,7 +62,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets[] = { 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(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(), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), @@ -104,7 +104,7 @@ static constexpr NWidgetPart _nested_build_vehicle_widgets_train_advanced[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_BV_CAPTION), SetDataTip(STR_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_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), diff --git a/src/company_base.h b/src/company_base.h index 85905276fd..753f14d116 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -17,6 +17,7 @@ #include "settings_type.h" #include "group.h" #include +#include #include static const Money COMPANY_MAX_LOAN_DEFAULT = INT64_MIN; @@ -31,9 +32,9 @@ struct CompanyEconomyEntry { }; struct CompanyInfrastructure { + std::array rail{}; ///< Count of company owned track bits for each rail type. std::array road{}; ///< Count of company owned track bits for each road type. uint32_t signal{}; ///< Count of company owned signals. - std::array rail{}; ///< Count of company owned track bits for each rail type. uint32_t water{}; ///< Count of company owned track bits for canals. uint32_t station{}; ///< Count of company owned station tiles. uint32_t airport{}; ///< Count of company owned airports. @@ -41,9 +42,7 @@ struct CompanyInfrastructure { /** Get total sum of all owned track bits. */ uint32_t GetRailTotal() const { - uint32_t total = 0; - for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) total += this->rail[rt]; - return total; + return std::accumulate(std::begin(this->rail), std::end(this->rail), 0U); } uint32_t GetRoadTotal() const; @@ -158,7 +157,7 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties { RailTypes avail_railtypes; ///< Rail types available to this company. RoadTypes avail_roadtypes; ///< Road types available to this company. - class AIInstance *ai_instance; + std::unique_ptr ai_instance; class AIInfo *ai_info; std::unique_ptr ai_config; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 2a8a753921..d406ab0c42 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -20,6 +20,7 @@ #include "network/network_base.h" #include "network/network_admin.h" #include "ai/ai.hpp" +#include "ai/ai_instance.hpp" #include "ai/ai_config.hpp" #include "company_manager_face.h" #include "window_func.h" diff --git a/src/company_gui.cpp b/src/company_gui.cpp index d9a4f17d2b..46e0214270 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -282,7 +282,7 @@ static constexpr NWidgetPart _nested_company_finances_widgets[] = { NWidget(NWID_HORIZONTAL), 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_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_STICKYBOX, COLOUR_GREY), EndContainer(), @@ -1192,7 +1192,7 @@ static constexpr NWidgetPart _nested_select_company_manager_face_widgets[] = { NWidget(NWID_HORIZONTAL), 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_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(), NWidget(WWT_PANEL, COLOUR_GREY, WID_SCMF_SELECT_FACE), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPadding(2), @@ -2455,16 +2455,15 @@ struct CompanyWindow : Window { int y = r.top; - uint rail_pieces = c->infrastructure.signal; - for (uint32_t pieces : c->infrastructure.rail) rail_pieces += pieces; + uint rail_pieces = c->infrastructure.signal + c->infrastructure.GetRailTotal(); if (rail_pieces != 0) { SetDParam(0, rail_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL); y += GetCharacterHeight(FS_NORMAL); } - uint road_pieces = 0; - for (uint32_t pieces : c->infrastructure.road) road_pieces += pieces; + /* GetRoadTotal() skips tram pieces, but we actually want road and tram here. */ + uint road_pieces = std::accumulate(std::begin(c->infrastructure.road), std::end(c->infrastructure.road), 0U); if (road_pieces != 0) { SetDParam(0, road_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD); diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 9a942f6886..306e24fbe3 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -147,11 +147,11 @@ struct IConsoleWindow : Window void Scroll(int amount) { if (amount < 0) { - size_t namount = (size_t) -amount; + size_t namount = static_cast(-amount); IConsoleWindow::scroll = (namount > IConsoleWindow::scroll) ? 0 : IConsoleWindow::scroll - namount; } else { 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(this->height / this->line_height); size_t max_scroll = (visible_lines > _iconsole_buffer.size()) ? 0 : _iconsole_buffer.size() + 1 - visible_lines; IConsoleWindow::scroll = std::min(IConsoleWindow::scroll + amount, max_scroll); } @@ -192,7 +192,7 @@ struct IConsoleWindow : Window if (this->truncate_timer.CountElapsed(delta_ms) == 0) return; 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(this->height / this->line_height); 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; diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index 8d968035a1..3cb32ff35d 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -117,17 +117,17 @@ DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index, Pool: Titem *item; if (Tcache && this->alloc_cache != nullptr) { dbg_assert(sizeof(Titem) == size); - item = (Titem *)this->alloc_cache; + item = reinterpret_cast(this->alloc_cache); this->alloc_cache = this->alloc_cache->next; if (Tzero) { /* Explicitly casting to (void *) prevents a clang warning - * we are actually memsetting a (not-yet-constructed) object */ - memset((void *)item, 0, sizeof(Titem)); + memset(static_cast(item), 0, sizeof(Titem)); } } else if (Tzero) { - item = (Titem *)CallocT(size); + item = reinterpret_cast(CallocT(size)); } else { - item = (Titem *)MallocT(size); + item = reinterpret_cast(MallocT(size)); } this->data[index] = Tops::PutPtr(item, param); 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(this->data[index] != Tops::NullValue()); if (Tcache) { - AllocCache *ac = (AllocCache *)this->data[index]; + AllocCache *ac = reinterpret_cast(this->data[index]); ac->next = this->alloc_cache; this->alloc_cache = ac; } else { diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 20c5f848b5..12bbcd6ce8 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -95,8 +95,8 @@ struct Pool : PoolBase { using ParamType = typename Tops::Tparam_type; using PtrType = typename Tops::Tptr; - /* Ensure Tmax_size is within the bounds of Tindex. */ - static_assert((uint64_t)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); + /* Ensure the highest possible index, i.e. Tmax_size -1, is within the bounds of Tindex. */ + static_assert(Tmax_size - 1 <= MAX_UVALUE(Tindex)); 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) { if (p == nullptr) return; - Titem *pn = (Titem *)p; + Titem *pn = static_cast(p); dbg_assert_msg(pn == Tpool->Get(pn->index), "name: %s", Tpool->name); Tpool->FreeItem(pn->index); } diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 02bf04f220..6fc0bc6cf5 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -48,11 +48,11 @@ static constexpr NWidgetPart _nested_train_depot_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), // rename button - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), // rename button + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP), EndContainer(), 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_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -77,9 +77,9 @@ static constexpr NWidgetPart _nested_train_depot_widgets[] = { 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_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_PUSHIMGBTN, COLOUR_GREY, WID_D_STOP_ALL), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_NULL), SetFill(0, 1), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_START_ALL), SetDataTip(SPR_FLAG_VEH_RUNNING, 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), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), 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), EndContainer(), }; diff --git a/src/fileio.cpp b/src/fileio.cpp index f1df3c90d6..ae94dfacac 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -213,10 +213,6 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc 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); #if !defined(_WIN32) if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { diff --git a/src/fios.cpp b/src/fios.cpp index bb7f1564a1..72167eb7e8 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -763,7 +763,7 @@ FiosNumberedSaveName::FiosNumberedSaveName(const std::string &prefix) : prefix(p /* Get the save list. */ FileList 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. */ if (list.begin() != list.end()) { diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 2a10a046de..d250e03345 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -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_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), 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(), /* Files */ 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_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), 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(), /* Files */ 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_BYDATE), SetDataTip(STR_SORT_BY_CAPTION_DATE, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), 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(), /* Files */ NWidget(NWID_HORIZONTAL), diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index e96bc7cdbd..4e3a96da62 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -806,7 +806,7 @@ struct FrametimeGraphWindow : Window { /* Determine horizontal scale based on period covered by 60 points * (slightly less than 2 seconds at full game speed) */ struct ScaleDef { TimingMeasurement range; int scale; }; - static const ScaleDef hscales[] = { + static const std::initializer_list hscales = { { TIMESTAMP_PRECISION * 120, 60 }, { TIMESTAMP_PRECISION * 10, 20 }, { TIMESTAMP_PRECISION * 5, 10 }, @@ -821,7 +821,7 @@ struct FrametimeGraphWindow : Window { void SelectVerticalScale(TimingMeasurement range) { /* Determine vertical scale based on peak value (within the horizontal scale + a bit) */ - static const TimingMeasurement vscales[] = { + static const std::initializer_list vscales = { TIMESTAMP_PRECISION * 100, TIMESTAMP_PRECISION * 10, TIMESTAMP_PRECISION * 5, @@ -1044,7 +1044,7 @@ void ConPrintFramerate() IConsolePrint(TC_SILVER, "Based on num. data points: {} {} {}", count1, count2, count3); - static const char *MEASUREMENT_NAMES[PFE_MAX] = { + static const std::array MEASUREMENT_NAMES = { "Game loop", " GL station ticks", " GL train ticks", @@ -1062,11 +1062,9 @@ void ConPrintFramerate() }; std::string ai_name_buf; - static const PerformanceElement rate_elements[] = { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO }; - 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]; if (pf.num_valid == 0) continue; IConsolePrint(TC_GREEN, "{} rate: {:.2f}fps (expected: {:.2f}fps)", diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index d82b574612..36a2d7fcf8 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -202,7 +202,7 @@ public: /** * Scan. */ - void Scan(const char *directory) + void Scan(const std::string &directory) { this->FileScanner::Scan(".txt", directory, false); } @@ -263,7 +263,7 @@ GameStrings *LoadTranslations() } } else { /* Scan filesystem */ - scanner.Scan(ldir.c_str()); + scanner.Scan(ldir); } gs->Compile(); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index ce5d85384c..055a4adc33 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -140,15 +140,15 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), /* Snow coverage. */ 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_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(), /* Desert coverage. */ 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_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(), /* Snow line. */ NWidget(NWID_HORIZONTAL), @@ -167,9 +167,9 @@ static constexpr NWidgetPart _nested_generate_landscape_widgets[] = { EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), + NWidget(WWT_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_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(), 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), @@ -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), /* Heightmap highest peak. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), + NWidget(WWT_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_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(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), EndContainer(), @@ -288,15 +288,15 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = { NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), /* Snow coverage. */ 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_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(), /* Desert coverage. */ 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_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(), /* Snow line. */ NWidget(NWID_HORIZONTAL), @@ -315,9 +315,9 @@ static constexpr NWidgetPart _nested_heightmap_load_widgets[] = { EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), + NWidget(WWT_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_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(), 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), @@ -1450,16 +1450,16 @@ static constexpr NWidgetPart _nested_create_scenario_widgets[] = { /* Date. */ 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_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(), /* Flat map height. */ 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_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(), @@ -1513,11 +1513,11 @@ static GenWorldStatus _gws; static const StringID _generation_class_table[] = { STR_GENERATION_WORLD_GENERATION, - STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION, + STR_GENERATION_LANDSCAPE_GENERATION, STR_GENERATION_RIVER_GENERATION, STR_GENERATION_CLEARING_TILES, - STR_SCENEDIT_TOOLBAR_TOWN_GENERATION, - STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION, + STR_GENERATION_TOWN_GENERATION, + STR_GENERATION_INDUSTRY_GENERATION, STR_GENERATION_OBJECT_GENERATION, STR_GENERATION_TREE_GENERATION, STR_GENERATION_PUBLIC_ROADS_GENERATION, diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 91898a4bf6..cab66a28a3 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -263,17 +263,17 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const const auto &charmap = run.GetGlyphToCharMap(); /* Run starts after our character, use the last found position. */ - if ((size_t)charmap.front() > index) return *position; + if (static_cast(charmap.front()) > index) return *position; position = positions.data(); for (auto it = charmap.begin(); it != charmap.end(); /* nothing */) { /* Plain honest-to-$deity match. */ - if ((size_t)*it == index) return *position; + if (static_cast(*it) == index) return *position; ++it; if (it == charmap.end()) break; /* 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(*it) > index) return *position; ++position; } } diff --git a/src/gfx_layout_fallback.cpp b/src/gfx_layout_fallback.cpp index be27383668..14842b1b14 100644 --- a/src/gfx_layout_fallback.cpp +++ b/src/gfx_layout_fallback.cpp @@ -218,7 +218,7 @@ std::unique_ptr FallbackParagraphLayout::NextLine */ if (this->buffer == nullptr) return nullptr; - std::unique_ptr l(new FallbackLine()); + std::unique_ptr l = std::make_unique(); if (*this->buffer == '\0') { /* Only a newline. */ diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index 4f3f7a6362..f32c998ea4 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -489,7 +489,7 @@ std::unique_ptr ICUParagraphLayout::NextLine(int ubidi_reorderVisual(bidi_level.data(), bidi_level.size(), vis_to_log.data()); /* Create line. */ - std::unique_ptr line(new ICULine()); + std::unique_ptr line = std::make_unique(); int cur_pos = 0; for (auto &i : vis_to_log) { diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 2da68517f2..03214f6ab2 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1440,7 +1440,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { ToggleBit(_legend_excluded_cargo, (*it)->Index()); this->UpdateExcludedData(); this->UpdateCargoExcludingGraphs(); - break; } break; } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index d2cff72172..375129bbfa 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -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_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), 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), - 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), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 2db2d6d03e..52906e227b 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -102,7 +102,7 @@ static uint16_t ParseCode(const char *start, const char *end) assert(start <= end); while (start < end && *start == ' ') start++; while (end > start && *end == ' ') end--; - std::string_view str{start, (size_t)(end - start)}; + std::string_view str{start, static_cast(end - start)}; for (const auto &kn : _keycode_to_name) { if (StrEqualsIgnoreCase(str, kn.name)) { return kn.keycode; diff --git a/src/house.h b/src/house.h index 37f1ecc8fd..3b55bf6e3e 100644 --- a/src/house.h +++ b/src/house.h @@ -30,6 +30,7 @@ static const HouseID NUM_HOUSES = 1024; ///< Total number of houses. 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_ORIGINAL_NUM_ACCEPTS = 3; ///< Original number of accepted cargo types. enum BuildingFlags { TILE_NO_FLAG = 0, diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 34cbf9de45..c060144f3e 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -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); if (res != CALLBACK_FAILED) { 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); if (res != CALLBACK_FAILED) { 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. */ static const int dmax = 14; - if (Industry::GetNumItems() > (size_t) (dmax * dmax * 2)) { + if (Industry::GetNumItems() > static_cast(dmax * dmax * 2)) { const Industry *i = nullptr; TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax); for (TileIndex atile : tile_area) { diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 80b2d8d145..0a7d58a5f4 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -196,10 +196,12 @@ static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixTy } switch (use_input) { 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[1] != INVALID_CARGO) GetCargoSuffix(4, cst, ind, ind_type, indspec, suffixes[1]); break; 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[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]); @@ -231,9 +233,9 @@ void GetCargoSuffix(CargoSuffixInOut use_input, CargoSuffixType cst, const Indus uint cargotype = local_id << 16 | use_input; GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffix); } 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) { - 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(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_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_SHADEBOX, 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 >= cpp_lengthof(IndustrySpec, accepts_cargo)); +static_assert(MAX_CARGOES >= std::tuple_size_v); +static_assert(MAX_CARGOES >= std::tuple_size_v); Dimension CargoesField::legend; ///< Dimension of the legend blob. Dimension CargoesField::cargo_border; ///< Dimensions of border between cargo lines and industry boxes. diff --git a/src/industry_type.h b/src/industry_type.h index 185e1f3a79..1ae903ad20 100644 --- a/src/industry_type.h +++ b/src/industry_type.h @@ -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_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(); diff --git a/src/ini_load.cpp b/src/ini_load.cpp index aced34b3a7..99df7c691f 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -20,7 +20,7 @@ * @param parent the group we belong to * @param name the name of the item */ -IniItem::IniItem(const std::string &name) +IniItem::IniItem(std::string_view name) { this->name = StrMakeValid(name); } @@ -29,7 +29,7 @@ IniItem::IniItem(const std::string &name) * Replace the current value with another value. * @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); } @@ -39,7 +39,7 @@ void IniItem::SetValue(const std::string_view value) * @param parent the file we belong to * @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); } @@ -49,7 +49,7 @@ IniGroup::IniGroup(const std::string &name, IniGroupType type) : type(type), com * @param name name of the item to find. * @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) { 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. * @return the requested item. */ -IniItem &IniGroup::GetOrCreateItem(const std::string &name) +IniItem &IniGroup::GetOrCreateItem(std::string_view name) { for (IniItem &item : this->items) { 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. * @return the created item. */ -IniItem &IniGroup::CreateItem(const std::string &name) +IniItem &IniGroup::CreateItem(std::string_view 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. * @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; }); } @@ -116,7 +116,7 @@ IniLoadFile::IniLoadFile(const IniGroupNameList &list_group_names, const IniGrou * @param name name of the group to find. * @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) { 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. * @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) { 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. * @return the requested group. */ -IniGroup &IniLoadFile::GetOrCreateGroup(const std::string &name) +IniGroup &IniLoadFile::GetOrCreateGroup(std::string_view name) { for (IniGroup &group : this->groups) { 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. * @return the created group. */ -IniGroup &IniLoadFile::CreateGroup(const std::string &name) +IniGroup &IniLoadFile::CreateGroup(std::string_view name) { 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; @@ -172,7 +172,7 @@ IniGroup &IniLoadFile::CreateGroup(const std::string &name) * Remove the group with the given name. * @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(); 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); /* for each line in the file */ - while ((size_t)ftell(in) < end && fgets(buffer, sizeof(buffer), in)) { + while (static_cast(ftell(in)) < end && fgets(buffer, sizeof(buffer), in)) { if (save != nullptr) *save += buffer; char c, *s; /* trim whitespace from the left side */ @@ -243,7 +243,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir, e--; } s++; // skip [ - group = &this->CreateGroup(std::string(s, e - s)); + group = &this->CreateGroup(std::string_view(s, e - s)); if (comment_size != 0) { group->comment.assign(comment, comment_size); comment_size = 0; @@ -251,7 +251,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir, } else if (group != nullptr) { if (group->type == IGT_SEQUENCE) { /* 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) { item.comment.assign(comment, comment_size); comment_size = 0; @@ -269,7 +269,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir, } /* 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) { item.comment.assign(comment, comment_size); comment_size = 0; diff --git a/src/ini_type.h b/src/ini_type.h index a42cb339b1..00a9140538 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -28,9 +28,9 @@ struct IniItem { std::optional value; ///< The value of 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. */ @@ -40,12 +40,12 @@ struct IniGroup { std::string name; ///< name of 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; - IniItem &GetOrCreateItem(const std::string &name); - IniItem &CreateItem(const std::string &name); - void RemoveItem(const std::string &name); + const IniItem *GetItem(std::string_view name) const; + IniItem &GetOrCreateItem(std::string_view name); + IniItem &CreateItem(std::string_view name); + void RemoveItem(std::string_view name); void Clear(); }; @@ -61,11 +61,11 @@ struct IniLoadFile { IniLoadFile(const IniGroupNameList &list_group_names = {}, const IniGroupNameList &seq_group_names = {}); virtual ~IniLoadFile() { } - const IniGroup *GetGroup(const std::string &name) const; - IniGroup *GetGroup(const std::string &name); - IniGroup &GetOrCreateGroup(const std::string &name); - IniGroup &CreateGroup(const std::string &name); - void RemoveGroup(const std::string &name); + const IniGroup *GetGroup(std::string_view name) const; + IniGroup *GetGroup(std::string_view name); + IniGroup &GetOrCreateGroup(std::string_view name); + IniGroup &CreateGroup(std::string_view name); + void RemoveGroup(std::string_view name); void LoadFromDisk(const std::string &filename, Subdirectory subdir, std::string *save = nullptr); diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 2e172b350b..c767ad679d 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -184,7 +184,7 @@ struct SelectGameWindow : public Window { this->ReadIntroGameViewportCommands(); - this->cur_viewport_command_index = (size_t)-1; + this->cur_viewport_command_index = SIZE_MAX; this->cur_viewport_command_time = 0; this->mouse_idle_time = 0; this->mouse_idle_pos = _cursor.pos; diff --git a/src/landscape.cpp b/src/landscape.cpp index 693a3978e6..9806d9d141 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -975,23 +975,23 @@ static std::pair GetDesertOrRainforestData() } template -void DesertOrRainforestProcessTiles(const std::pair desert_rainforest_data, const Rect16 *&data, TileIndex tile, F handle_tile) +bool DesertOrRainforestProcessTiles(const std::pair 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; for (int16_t x = r.left; x <= r.right; x++) { for (int16_t y = r.top; y <= r.bottom; 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) { - TileIndex update_freq = MapSize() / 4; - const Rect16 *data; + uint update_freq = MapSize() / 4; const std::pair desert_rainforest_data = GetDesertOrRainforestData(); @@ -1000,10 +1000,10 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) 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))); }); - if (data == desert_rainforest_data.second) { + if (ok) { SetTropicZone(tile, TROPICZONE_DESERT); } } @@ -1019,10 +1019,10 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) 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)); }); - if (data == desert_rainforest_data.second) { + if (ok) { SetTropicZone(tile, TROPICZONE_RAINFOREST); } } diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 3d08a12588..77cc00f7df 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2912,9 +2912,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wêreld 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_OBJECT_GENERATION :{BLACK}Onbeweegbaar generasie +STR_GENERATION_TREE_GENERATION :{BLACK}Boom generasie STR_GENERATION_SETTINGUP_GAME :{BLACK}Stel speletjie op STR_GENERATION_PREPARING_TILELOOP :{BLACK}Hardloop teël-herhaling STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lopende skrif diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 2be1344d26..e3534f09b8 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2773,9 +2773,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK} مولد الخريطة STR_GENERATION_RIVER_GENERATION :{BLACK}مولد الانهار -STR_GENERATION_TREE_GENERATION :{BLACK} مولد الشجر -STR_GENERATION_OBJECT_GENERATION :{BLACK}صانع الخامات STR_GENERATION_CLEARING_TILES :{BLACK}مولد المناطق الخشنة والصخرية +STR_GENERATION_OBJECT_GENERATION :{BLACK}صانع الخامات +STR_GENERATION_TREE_GENERATION :{BLACK} مولد الشجر STR_GENERATION_SETTINGUP_GAME :{BLACK}تجهيز لعبة STR_GENERATION_PREPARING_TILELOOP :{BLACK} تشغيل المتكررة STR_GENERATION_PREPARING_GAME :{BLACK}يُجَهِز اللعبه diff --git a/src/lang/basque.txt b/src/lang/basque.txt index cbf591f95d..4815bcf29b 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2751,9 +2751,9 @@ STR_GENERATION_PROGRESS :{WHITE} %{NUM} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Mundua sortu 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_OBJECT_GENERATION :{BLACK}Objektu sorkuntza +STR_GENERATION_TREE_GENERATION :{BLACK} Zuhaitzak sortu STR_GENERATION_SETTINGUP_GAME :{BLACK}Jokoaren ezarpenak STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lauki buelta abiarazten STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scripta abiarazten diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 73d9a197ed..9b3e06fb18 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3723,9 +3723,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Стварэньне сусьвету STR_GENERATION_RIVER_GENERATION :{BLACK}Стварэньне рэк -STR_GENERATION_TREE_GENERATION :{BLACK}Высаджваньне лясоў -STR_GENERATION_OBJECT_GENERATION :{BLACK}Ґенэрацыя нерухомасьці STR_GENERATION_CLEARING_TILES :{BLACK}Расстаноўка дэкарацыяў і камянёў +STR_GENERATION_OBJECT_GENERATION :{BLACK}Ґенэрацыя нерухомасьці +STR_GENERATION_TREE_GENERATION :{BLACK}Высаджваньне лясоў STR_GENERATION_SETTINGUP_GAME :{BLACK}Наладка гульні STR_GENERATION_PREPARING_TILELOOP :{BLACK}Падрыхтоўка да запуску... STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выконваецца скрыпт diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index be2b27f66b..9d6c001e99 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -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_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_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_TOOLTIP :{BLACK}Salvar face favorita 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_NUM :{BLACK}{NUM} / {NUM} 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_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_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_PREPARING_TILELOOP :{BLACK}Preparando o terreno 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_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_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_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_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_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_SITE_UNSUITABLE :{WHITE}... local não adequado STR_ERROR_ALREADY_BUILT :{WHITE}... já construído diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index b432c9e60a..4ff5b6a6f4 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2963,9 +2963,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Генерация на свят STR_GENERATION_RIVER_GENERATION :{BLACK}Създаване на река -STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва -STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични STR_GENERATION_CLEARING_TILES :{BLACK}Създаване на твърда и скална повърност +STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични +STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка на играта STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на плочките STR_GENERATION_PREPARING_SCRIPT :{BLACK}Пускане на програмен език diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 5da45529ba..7007438e45 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Realmen STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% complet STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} 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_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_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_PREPARING_TILELOOP :{BLACK}Passant el bucle de cel·les 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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No pots fer que un tren passi d'una senyal amb perill... diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 6435b15c58..25e44e6b32 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3080,9 +3080,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% g STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Izrada svijeta 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_OBJECT_GENERATION :{BLACK}Nepomično generiranje +STR_GENERATION_TREE_GENERATION :{BLACK}Generiranje drveća STR_GENERATION_SETTINGUP_GAME :{BLACK}Pripremam igru STR_GENERATION_PREPARING_TILELOOP :{BLACK}Izvršavam tile-petlju STR_GENERATION_PREPARING_SCRIPT :{BLACK}Izvođenje skripte u tijeku diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 47af6fe005..e680ee7475 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3480,9 +3480,9 @@ STR_GENERATION_PROGRESS :{WHITE}Z{NBSP}{ STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tvorba krajiny 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_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_PREPARING_TILELOOP :{BLACK}Spouštění tile-loopu (cyklus na dílcích mapy) STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rozbíhání skriptu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index ad5dad7ec9..43315a6951 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vil du STR_GENERATION_PROGRESS :{WHITE}{NUM}% færdig STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Verdensgenerering +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskabs 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_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_PREPARING_TILELOOP :{BLACK}Kører felt-løkken 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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke få toget til at passere signalet... diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index bea3abf06e..9c709cfc71 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wereldontwikkeling 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_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten +STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel wordt geconfigureerd STR_GENERATION_PREPARING_TILELOOP :{BLACK}Bezig met tile-loop 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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het sein laten passeren bij gevaar... diff --git a/src/lang/english.txt b/src/lang/english.txt index 09508cacd7..d15366d319 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape 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_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_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index e3782bcd19..27ec2b065c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape 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_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_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index f9ffd8aaf2..e47c7b95ca 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3393,10 +3393,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Do you STR_GENERATION_PROGRESS :{WHITE}{NUM}% complete STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}World generation +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landscape 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_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_PREPARING_TILELOOP :{BLACK}Running tile-loop 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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Can't make train pass signal at danger... diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 118a9baa90..6407efec0e 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -3333,9 +3333,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Mondgenerado 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_OBJECT_GENERATION :{BLACK}Nemoveblaĵa generado +STR_GENERATION_TREE_GENERATION :{BLACK}Arba generado STR_GENERATION_SETTINGUP_GAME :{BLACK}Agordante ludon STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trakurante kvadratojn STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ruligas la skripton diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index ed67e64d0b..2ba4038a0c 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3447,9 +3447,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% v STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailma 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_OBJECT_GENERATION :{BLACK}Objekti tekitamine +STR_GENERATION_TREE_GENERATION :{BLACK}Puude tekitamine STR_GENERATION_SETTINGUP_GAME :{BLACK}Mängu seadistamine STR_GENERATION_PREPARING_TILELOOP :{BLACK}Ruudustiku töötlemine STR_GENERATION_PREPARING_SCRIPT :{BLACK}Täitmisel olev skript diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 5e6b384a67..6a4460a8a3 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2583,9 +2583,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% l STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Heims 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_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_PREPARING_TILELOOP :{BLACK}Koyrir punta sloyfu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Koyrir skript diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 14a5098396..f3fe6394ed 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -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_DATE_CAPTION :{BLACK}Päiväys 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_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_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_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_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_PASSWORD :{SILVER}Salasanasuojattu! 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_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Maaston 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_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_PREPARING_TILELOOP :{BLACK}Ajetaan tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Suoritetaan skriptiä @@ -4916,7 +4919,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu # 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_PNGMAP :{WHITE}Maastoa ei voida ladata PNG-tiedostosta... diff --git a/src/lang/french.txt b/src/lang/french.txt index b67f2b1132..6dff3f4861 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Voulez- STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% réalisé{P "" s} STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} 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_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_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_PREPARING_TILELOOP :{BLACK}Rafraîchissement du terrain 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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossible de forcer le train à avancer sous le danger... diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index e32bf24f5c..603d9dd1da 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -2719,9 +2719,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Wrâldgeneraasje 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_OBJECT_GENERATION :{BLACK}Objekt meitsje +STR_GENERATION_TREE_GENERATION :{BLACK}Bostgeneraasje STR_GENERATION_SETTINGUP_GAME :{BLACK}Set spul klear STR_GENERATION_PREPARING_TILELOOP :{BLACK}Trochrint tegellus STR_GENERATION_PREPARING_SCRIPT :{BLACK}Fiert skript út diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 88cb7c19d8..0f7da64d20 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3097,9 +3097,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Gin saoghal 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_OBJECT_GENERATION :{BLACK}Gin oibseactan +STR_GENERATION_TREE_GENERATION :{BLACK}Gin craobhan STR_GENERATION_SETTINGUP_GAME :{BLACK}A' suidheachadh a' gheama STR_GENERATION_PREPARING_TILELOOP :{BLACK}A' ruith lùb-lice STR_GENERATION_PREPARING_SCRIPT :{BLACK}A' ruith sgriobt diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 7d04ac030f..de61d4bfa2 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3393,9 +3393,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Xeración do mundo 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_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_PREPARING_TILELOOP :{BLACK}Executando bucle de cadros STR_GENERATION_PREPARING_SCRIPT :{BLACK}Executando script diff --git a/src/lang/german.txt b/src/lang/german.txt index 16fb7581fc..7d2d2c84b6 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% a STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Spielfeld wird erzeugt 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_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_PREPARING_TILELOOP :{BLACK}Spielfeld wird belebt STR_GENERATION_PREPARING_SCRIPT :{BLACK}Führe Skript aus diff --git a/src/lang/greek.txt b/src/lang/greek.txt index ea3dad2136..1d3871ed55 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3485,10 +3485,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Σίγ STR_GENERATION_PROGRESS :{WHITE}{NUM}% ολοκληρώθηκε STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Δημιουργία κόσμου +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Δημιουργία τοπίου STR_GENERATION_RIVER_GENERATION :{BLACK}Δημιουργία ποταμού -STR_GENERATION_TREE_GENERATION :{BLACK}Δημιουργία δέντρων -STR_GENERATION_OBJECT_GENERATION :{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_PREPARING_TILELOOP :{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_EXPLANATION :{WHITE}Αλλάξτε τις ρύθμισεις NewGRF σας 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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Δεν μπορεί το τρένο να περάσει σήμα με κίνδυνο... diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index e92de862c5..0735a2f273 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2981,9 +2981,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% : STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}יצור עולם STR_GENERATION_RIVER_GENERATION :{BLACK}יצירת נהרות -STR_GENERATION_TREE_GENERATION :{BLACK}יצירת עצים -STR_GENERATION_OBJECT_GENERATION :{BLACK}יצירת מבנים בלתי ניידים STR_GENERATION_CLEARING_TILES :{BLACK}יצירת איזורים סלעיים +STR_GENERATION_OBJECT_GENERATION :{BLACK}יצירת מבנים בלתי ניידים +STR_GENERATION_TREE_GENERATION :{BLACK}יצירת עצים STR_GENERATION_SETTINGUP_GAME :{BLACK}קביעת הגדרות המשחק STR_GENERATION_PREPARING_TILELOOP :{BLACK}מריץ לולאה על כל המשבצות STR_GENERATION_PREPARING_SCRIPT :{BLACK}מריץ סקריפט diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index a24baec0e5..2d7bfcced6 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3455,9 +3455,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Világ létrehozása 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_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_PREPARING_TILELOOP :{BLACK}Mezők véglegesítése STR_GENERATION_PREPARING_SCRIPT :{BLACK}Futó szkript diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 09d9780897..273c166c58 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2691,9 +2691,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% t STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Sköpun heims 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_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_PREPARING_TILELOOP :{BLACK}Keyri reitalykkju STR_GENERATION_PREPARING_SCRIPT :{BLACK}Keyri forskrift diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 99fb0fc61e..eab9806bc4 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3330,9 +3330,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% s STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pembuatan Bentang Darat 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_OBJECT_GENERATION :{BLACK}Membuat objek tak bergerak +STR_GENERATION_TREE_GENERATION :{BLACK}Membuat pepohonan STR_GENERATION_SETTINGUP_GAME :{BLACK}Mengatur permainan STR_GENERATION_PREPARING_TILELOOP :{BLACK}Menyiapkan area loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Menjalankan skrip diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d99a87a45b..08b19d8814 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3116,9 +3116,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Domhan a chruthú 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_OBJECT_GENERATION :{BLACK}Cruthú oibiachtaí +STR_GENERATION_TREE_GENERATION :{BLACK}Crainn a chruthú STR_GENERATION_SETTINGUP_GAME :{BLACK}Cluiche á chumrú STR_GENERATION_PREPARING_TILELOOP :{BLACK}Lúb tíleanna á rith STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script reatha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 05195c2e51..ae2491cf07 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3433,9 +3433,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generazione mondo 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_OBJECT_GENERATION :{BLACK}Generazione oggetti inamovibili +STR_GENERATION_TREE_GENERATION :{BLACK}Generazione alberi STR_GENERATION_SETTINGUP_GAME :{BLACK}Impostazione partita STR_GENERATION_PREPARING_TILELOOP :{BLACK}Generazione caselle del terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Esecuzione script diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index f3e61dccff..5842462b4c 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3203,9 +3203,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}マップ生成 STR_GENERATION_RIVER_GENERATION :{BLACK}河川を生成中 -STR_GENERATION_TREE_GENERATION :{BLACK}植林中 -STR_GENERATION_OBJECT_GENERATION :{BLACK}灯台/電波塔配置中 STR_GENERATION_CLEARING_TILES :{BLACK}岩石/荒地を設定中 +STR_GENERATION_OBJECT_GENERATION :{BLACK}灯台/電波塔配置中 +STR_GENERATION_TREE_GENERATION :{BLACK}植林中 STR_GENERATION_SETTINGUP_GAME :{BLACK}ゲームを設定中 STR_GENERATION_PREPARING_TILELOOP :{BLACK}タイルループを実行中 STR_GENERATION_PREPARING_SCRIPT :{BLACK}スクリプト実行中 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 7cdf6bf131..f0e160ae02 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}세계 STR_GENERATION_PROGRESS :{WHITE}{NUM}% 완료 STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}지형 만드는 중 +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}지형 생성 STR_GENERATION_RIVER_GENERATION :{BLACK}강 제작 -STR_GENERATION_TREE_GENERATION :{BLACK}나무 심는 중 -STR_GENERATION_OBJECT_GENERATION :{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_PREPARING_TILELOOP :{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진법) # 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_TOOLTIP :{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_SPRITE_TOOLTIP :{BLACK}현재 선택된 스프라이트를 표현합니다. 이 스프라이트를 표현할 때, 정렬 상태는 무시하고 표현합니다. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}X축이나 Y축 방향으로 스프라이트를 이동시킵니다. CTRL+클릭하면 한 번에 8씩 이동시킬 수 있습니다 +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 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_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_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 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_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 6bc1b21f6a..da3b6d5595 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3065,9 +3065,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Creatio orbis terrarum 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_OBJECT_GENERATION :{BLACK}Creatio ornamentorum +STR_GENERATION_TREE_GENERATION :{BLACK}Creatio arborum STR_GENERATION_SETTINGUP_GAME :{BLACK}Ludum instruens STR_GENERATION_PREPARING_TILELOOP :{BLACK}Tegularum cursum exsequens STR_GENERATION_PREPARING_SCRIPT :{BLACK}Scriptum exsequens diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 6b759b0315..4484f63f8a 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3398,9 +3398,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% p STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaules 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_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_PREPARING_TILELOOP :{BLACK}Skrejošs nosaukums STR_GENERATION_PREPARING_SCRIPT :{BLACK}Strādājošs skripts diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 798f207e21..b7efc05846 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3382,9 +3382,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% u STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Pasaulio generacija 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_OBJECT_GENERATION :{BLACK}Nejudinama generacija +STR_GENERATION_TREE_GENERATION :{BLACK}Medžių generacija STR_GENERATION_SETTINGUP_GAME :{BLACK}Sukurti zaidima STR_GENERATION_PREPARING_TILELOOP :{BLACK}Paleidžiamas tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skriptas veikia diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f19ae7f54e..7bb67b299e 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3391,9 +3391,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% k STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Welt-Generatioun 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_OBJECT_GENERATION :{BLACK}Objets-Generatioun +STR_GENERATION_TREE_GENERATION :{BLACK}Baam Generatioun STR_GENERATION_SETTINGUP_GAME :{BLACK}Spill gëtt opgestallt STR_GENERATION_PREPARING_TILELOOP :{BLACK}Felder-Verdeelung STR_GENERATION_PREPARING_SCRIPT :{BLACK}Lafende Script diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 5266a35664..ebe3d03ba5 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2587,9 +2587,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% s STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Penjanaan dunia 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_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_PREPARING_TILELOOP :{BLACK}Lingkaran petak sedang dijalankan STR_GENERATION_PREPARING_SCRIPT :{BLACK}Skrip sedang berjalan diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 64a30700d5..965b14c33b 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3395,10 +3395,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vil du STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% ferdig STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generer en verden +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskapsgenerering 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_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_PREPARING_TILELOOP :{BLACK}Kjører ruteløkke 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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan ikke tvinge tog til å passere signal ved fare... diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 43ad419318..ce277933aa 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2757,9 +2757,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}{NB STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generer ei verd 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_OBJECT_GENERATION :{BLACK}Ikkje-flyttbar generering +STR_GENERATION_TREE_GENERATION :{BLACK}Tregenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargjer spelet STR_GENERATION_PREPARING_TILELOOP :{BLACK}Køyrer rute-løkkje STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kjøyrande script diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 00c2596bc2..f8ca0477e2 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -2588,9 +2588,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}ساخت دنیا STR_GENERATION_RIVER_GENERATION :{BLACK}ساخت رودخانه -STR_GENERATION_TREE_GENERATION :{BLACK}ساختن درخت -STR_GENERATION_OBJECT_GENERATION :{BLACK}ساختن اشیاء STR_GENERATION_CLEARING_TILES :{BLACK}ساختن مناطق ناهموار و صخره ها +STR_GENERATION_OBJECT_GENERATION :{BLACK}ساختن اشیاء +STR_GENERATION_TREE_GENERATION :{BLACK}ساختن درخت STR_GENERATION_SETTINGUP_GAME :{BLACK}راه اندازی بازی STR_GENERATION_PREPARING_TILELOOP :{BLACK}اجرای حلقه قطعه ها STR_GENERATION_PREPARING_SCRIPT :{BLACK}کدهای در حال اجرا diff --git a/src/lang/polish.txt b/src/lang/polish.txt index ee5ab860d3..74add35f87 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3773,11 +3773,14 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Czy na STR_GENERATION_PROGRESS :{WHITE}Ukończono w {NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tworzenie świata -STR_GENERATION_RIVER_GENERATION :{BLACK}Generator rzek -STR_GENERATION_TREE_GENERATION :{BLACK}Tworzenie drzew -STR_GENERATION_OBJECT_GENERATION :{BLACK}Tworzenie obiektów +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Tworzenie krajobrazu +STR_GENERATION_RIVER_GENERATION :{BLACK}Tworzenie rzek 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_SCRIPT :{BLACK}Uruchamianie skryptu STR_GENERATION_PREPARING_GAME :{BLACK}Przygotowywanie gry diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 74c418193a..7e11333ea3 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3394,10 +3394,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Quer me STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} 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_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_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_PREPARING_TILELOOP :{BLACK}A preparar o terreno STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script a correr diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 2d016ba1ad..e34f94e7bd 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3387,9 +3387,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% e STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generare lume 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_OBJECT_GENERATION :{BLACK}Generare fixă +STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori STR_GENERATION_SETTINGUP_GAME :{BLACK}Se configurează jocul STR_GENERATION_PREPARING_TILELOOP :{BLACK}Initializez ciclul dalelor STR_GENERATION_PREPARING_SCRIPT :{BLACK}Se rulează script-ul diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 5fbcbcba24..35282a7f7a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3568,10 +3568,13 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Вы д STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Создание мира +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Создание ландшафта STR_GENERATION_RIVER_GENERATION :{BLACK}Создание рек -STR_GENERATION_TREE_GENERATION :{BLACK}Высадка лесов -STR_GENERATION_OBJECT_GENERATION :{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_PREPARING_TILELOOP :{BLACK}Подготовка к запуску... STR_GENERATION_PREPARING_SCRIPT :{BLACK}Выполняется скрипт diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 6ca88c3f00..ed23c52840 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3520,9 +3520,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% z STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Stvaranje sveta 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_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_PREPARING_TILELOOP :{BLACK}Razrađivanje pločica STR_GENERATION_PREPARING_SCRIPT :{BLACK}Pokretanje skripte diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 4ca83af535..e37eaa79d1 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}已完 STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}地图生成 STR_GENERATION_RIVER_GENERATION :{BLACK}生成河流 -STR_GENERATION_TREE_GENERATION :{BLACK}生成树木 -STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施 STR_GENERATION_CLEARING_TILES :{BLACK}生成岩石地貌 +STR_GENERATION_OBJECT_GENERATION :{BLACK}生成固定设施 +STR_GENERATION_TREE_GENERATION :{BLACK}生成树木 STR_GENERATION_SETTINGUP_GAME :{BLACK}设置游戏 STR_GENERATION_PREPARING_TILELOOP :{BLACK}地貌细节生成 STR_GENERATION_PREPARING_SCRIPT :{BLACK}当前脚本 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 8ce5a9f166..cb8177f58d 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3462,9 +3462,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% h STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generovanie sveta 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_OBJECT_GENERATION :{BLACK}Generovanie objektov +STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavovanie hry STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spúšťanie políčkového cyklu STR_GENERATION_PREPARING_SCRIPT :{BLACK}Spúšťanie skriptu diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index c8149b0ebb..99483e3c9f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2995,9 +2995,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% n STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Ustvarjanje sveta 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_OBJECT_GENERATION :{BLACK}Ustvarjanje zgradbe +STR_GENERATION_TREE_GENERATION :{BLACK}Ustvarjanje dreves STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavljanje igre STR_GENERATION_PREPARING_TILELOOP :{BLACK}Zagnano ponavljanje polj STR_GENERATION_PREPARING_SCRIPT :{BLACK}Poganjam skripto diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 0624ce69bd..2d04edbc6c 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3395,9 +3395,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mundo 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_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_PREPARING_TILELOOP :{BLACK}Ejecutar ciclo de casillas STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script en funcionamiento diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 1753a04fde..2ad8c0c1cc 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3326,9 +3326,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mapa 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_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_PREPARING_TILELOOP :{BLACK}Generando casillas STR_GENERATION_PREPARING_SCRIPT :{BLACK}Ejecutando script diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 823870fc23..a83b82094a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% f STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld 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_OBJECT_GENERATION :{BLACK}Generera objekt +STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kör tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Kör skript diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index be2da27776..d14a4ebda0 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3108,9 +3108,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}உலகம் உருவாக்குதல் STR_GENERATION_RIVER_GENERATION :{BLACK}ஆறு உருவாக்குதல் -STR_GENERATION_TREE_GENERATION :{BLACK}மரங்கள் உருவாக்குதல் -STR_GENERATION_OBJECT_GENERATION :{BLACK}பொருள் உருவாக்குதல் STR_GENERATION_CLEARING_TILES :{BLACK}சமமில்லாத மற்றும் கல்லான பகுதி உருவாக்குதல் +STR_GENERATION_OBJECT_GENERATION :{BLACK}பொருள் உருவாக்குதல் +STR_GENERATION_TREE_GENERATION :{BLACK}மரங்கள் உருவாக்குதல் STR_GENERATION_SETTINGUP_GAME :{BLACK}ஆட்டம் அமைக்கப்படுகின்றது STR_GENERATION_PREPARING_SCRIPT :{BLACK}வரிவடிவம் செயல்படுத்தப்படுகின்றது STR_GENERATION_PREPARING_GAME :{BLACK}ஆட்டம் தயாராகிறது diff --git a/src/lang/thai.txt b/src/lang/thai.txt index a9fd5a7a83..67964aa429 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2930,9 +2930,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}เครื่องมือสร้างแผนที่ STR_GENERATION_RIVER_GENERATION :{BLACK}สร้างแม่น้ำ -STR_GENERATION_TREE_GENERATION :{BLACK}สร้างต้นไม่ -STR_GENERATION_OBJECT_GENERATION :{BLACK}สร้างวัตถุ STR_GENERATION_CLEARING_TILES :{BLACK}สร้างพื้นหิน +STR_GENERATION_OBJECT_GENERATION :{BLACK}สร้างวัตถุ +STR_GENERATION_TREE_GENERATION :{BLACK}สร้างต้นไม่ STR_GENERATION_SETTINGUP_GAME :{BLACK}ตั้งค่าให้กับเกม STR_GENERATION_PREPARING_TILELOOP :{BLACK}Running tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Running script diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 27dd3f671c..fdb34c2378 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3280,9 +3280,9 @@ STR_GENERATION_PROGRESS :{WHITE}完成 { STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}產生世界 STR_GENERATION_RIVER_GENERATION :{BLACK}產生河流 -STR_GENERATION_TREE_GENERATION :{BLACK}產生樹木 -STR_GENERATION_OBJECT_GENERATION :{BLACK}無法移動 STR_GENERATION_CLEARING_TILES :{BLACK}產生粗地與岩石區域 +STR_GENERATION_OBJECT_GENERATION :{BLACK}無法移動 +STR_GENERATION_TREE_GENERATION :{BLACK}產生樹木 STR_GENERATION_SETTINGUP_GAME :{BLACK}設定遊戲 STR_GENERATION_PREPARING_TILELOOP :{BLACK}執行單格迴圈中 STR_GENERATION_PREPARING_SCRIPT :{BLACK}正在運行腳本 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 7945464b7c..c71907164d 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -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_NAME_IN_USE :isim kullanımda 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_KICKED :sunucu tarafından atıldı 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_NUM :{BLACK}{NUM} / {NUM} 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_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_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_PREPARING_TILELOOP :{BLACK}tile-loop ç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ı) # 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_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 @@ -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_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 STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tehlikedeki tren sinyali geçemez... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 496e385fbc..81a1c9224a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3534,9 +3534,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Створення світу STR_GENERATION_RIVER_GENERATION :{BLACK}Генерація річок -STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев -STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості STR_GENERATION_CLEARING_TILES :{BLACK}Розкидати каміння +STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості +STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев STR_GENERATION_SETTINGUP_GAME :{BLACK}Налаштування гри STR_GENERATION_PREPARING_TILELOOP :{BLACK}Виконуємо цикл STR_GENERATION_PREPARING_SCRIPT :{BLACK}Виконується скрипт diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1c6cfb73e6..ab8703fa71 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% h STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Tạo màn 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_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_PREPARING_TILELOOP :{BLACK}Đang chạy sinh tile STR_GENERATION_PREPARING_SCRIPT :{BLACK}Đang chạy tập lệnh diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 40e7dcc914..c123688b4d 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3394,9 +3394,9 @@ STR_GENERATION_PROGRESS :{WHITE}{NUM}% c STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Cynhyrchu byd 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_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_PREPARING_TILELOOP :{BLACK}Rhedeg dolen teiliau STR_GENERATION_PREPARING_SCRIPT :{BLACK}Rhedeg sgript diff --git a/src/league_base.h b/src/league_base.h index b77ebebdbd..d8ab22b8d9 100644 --- a/src/league_base.h +++ b/src/league_base.h @@ -20,7 +20,7 @@ bool IsValidLink(Link link); typedef Pool LeagueTableElementPool; extern LeagueTableElementPool _league_table_element_pool; -typedef Pool LeagueTablePool; +typedef Pool LeagueTablePool; extern LeagueTablePool _league_table_pool; diff --git a/src/league_gui.cpp b/src/league_gui.cpp index a00a81820b..95db2d23a6 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -293,7 +293,7 @@ private: for (uint i = 0; i != elements.size(); i++) { auto *lte = elements[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); } } diff --git a/src/misc/dbg_helpers.h b/src/misc/dbg_helpers.h index 610b6ab09b..f5b91b6fb4 100644 --- a/src/misc/dbg_helpers.h +++ b/src/misc/dbg_helpers.h @@ -36,7 +36,7 @@ template struct ArrayT { template inline typename ArrayT::Item ItemAtT(E idx, const T &t, typename ArrayT::Item t_unk) { - if ((size_t)idx >= ArrayT::length) { + if (static_cast(idx) >= ArrayT::length) { return t_unk; } return t[idx]; @@ -50,7 +50,7 @@ inline typename ArrayT::Item ItemAtT(E idx, const T &t, typename ArrayT::I template inline typename ArrayT::Item ItemAtT(E idx, const T &t, typename ArrayT::Item t_unk, E idx_inv, typename ArrayT::Item t_inv) { - if ((size_t)idx < ArrayT::length) { + if (static_cast(idx) < ArrayT::length) { return t[idx]; } if (idx == idx_inv) { diff --git a/src/misc/lrucache.hpp b/src/misc/lrucache.hpp index b0e950b2fc..9d27241b57 100644 --- a/src/misc/lrucache.hpp +++ b/src/misc/lrucache.hpp @@ -74,7 +74,7 @@ public: } /* 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()); } diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 7160cd4f93..3220ba2260 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -54,7 +54,7 @@ static constexpr NWidgetPart _nested_land_info_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), 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), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_LI_BACKGROUND), EndContainer(), diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index f350c431da..1ecd6ca1b6 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -177,8 +177,8 @@ size_t Packet::ReadRawPacketSize() const bool Packet::ParsePacketSize() { assert(this->cs != nullptr); - size_t size = (size_t)this->buffer[0]; - size += (size_t)this->buffer[1] << 8; + size_t size = static_cast(this->buffer[0]); + size += static_cast(this->buffer[1]) << 8; /* 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. diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 524212c74f..1ce71b1cc8 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -165,7 +165,7 @@ void NetworkUDPSocketHandler::ReceivePackets() /* If the size does not match the packet must be corrupted. * Otherwise it will be marked as corrupted later on. */ - if (!p.ParsePacketSize() || (size_t)nbytes != p.Size()) { + if (!p.ParsePacketSize() || static_cast(nbytes) != p.Size()) { DEBUG(net, 1, "received a packet with mismatching size from %s, (%u, %u)", NetworkAddressDumper().GetAddressAsString(&address), (uint)nbytes, (uint)p.Size()); continue; } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index fbb139109c..b9d849e2f1 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -448,7 +448,7 @@ static bool GunzipFile(const ContentInfo *ci) if (errnum != 0 && errnum != Z_STREAM_END) ret = false; break; } - if (read < 0 || (size_t)read != fwrite(buff, 1, read, fout)) { + if (read < 0 || static_cast(read) != fwrite(buff, 1, read, fout)) { /* If gzread() returns -1, there was an error in archive */ ret = false; break; @@ -502,7 +502,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet &p) } else { /* We have a file opened, thus are downloading internal content */ size_t toRead = p.RemainingBytesToTransfer(); - if (toRead != 0 && (size_t)p.TransferOut(TransferOutFWrite, this->curFile) != toRead) { + if (toRead != 0 && static_cast(p.TransferOut(TransferOutFWrite, this->curFile)) != toRead) { 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); this->CloseConnection(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 082e5d0eb6..adb666371a 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -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->ApplyAspectRatio(); } 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(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(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_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(), 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(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_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(), @@ -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(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_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(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), 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(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_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(), diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 0c2934968e..be7bdea395 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -277,7 +277,7 @@ struct GRFLocation { } }; -static btree::btree_map _grm_sprites; +static btree::btree_map> _grm_sprites; typedef btree::btree_map> GRFLineToSpriteOverride; static GRFLineToSpriteOverride _grf_line_to_action6_sprite_override; 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 */ 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' */ uint8_t cargo_part = GB(cargotypes, 8 * j, 8); CargoID cargo = GetCargoTranslation(cargo_part, _cur.grffile); @@ -2594,6 +2594,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, con } else { housespec->accepts_cargo[j] = cargo; } + housespec->accepts_cargo_label[j] = CT_INVALID; } break; } @@ -3373,6 +3374,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr uint16_t acctp = buf->ReadWord(); tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile); tsp->acceptance[prop - 0x0A] = Clamp(GB(acctp, 8, 8), 0, 16); + tsp->accepts_cargo_label[prop - 0x0A] = CT_INVALID; break; } @@ -3459,14 +3461,14 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) case 0x0C: case 0x0D: case 0x0E: - case 0x10: + case 0x10: // INDUSTRY_ORIGINAL_NUM_OUTPUTS bytes case 0x1B: case 0x1F: case 0x24: buf->ReadWord(); break; - case 0x11: + case 0x11: // INDUSTRY_ORIGINAL_NUM_INPUTS bytes + 1 case 0x1A: case 0x1C: case 0x1D: @@ -3498,7 +3500,7 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) } 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; case 0x15: @@ -3746,14 +3748,14 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; 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_label[j] = CT_INVALID; } break; 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_label[j] = CT_INVALID; } @@ -6300,22 +6302,22 @@ static void NewSpriteGroup(ByteReader *buf) act_group = group; group->version = type; if (type == 0) { - group->num_input = 3; - for (uint i = 0; i < 3; i++) { + group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) { group->subtract_input[i] = (int16_t)buf->ReadWord(); // signed } - group->num_output = 2; - for (uint i = 0; i < 2; i++) { + group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) { group->add_output[i] = buf->ReadWord(); // unsigned } group->again = buf->ReadByte(); } else if (type == 1) { - group->num_input = 3; - for (uint i = 0; i < 3; i++) { + group->num_input = INDUSTRY_ORIGINAL_NUM_INPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_INPUTS; i++) { group->subtract_input[i] = buf->ReadByte(); } - group->num_output = 2; - for (uint i = 0; i < 2; i++) { + group->num_output = INDUSTRY_ORIGINAL_NUM_OUTPUTS; + for (uint i = 0; i < INDUSTRY_ORIGINAL_NUM_OUTPUTS; i++) { group->add_output[i] = 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); } +/** + * 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 */ static void SpriteReplace(ByteReader *buf) { @@ -8049,6 +8066,19 @@ static void SpriteReplace(ByteReader *buf) 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++) { int load_index = first_sprite + j; _cur.nfo_line++; @@ -8423,7 +8453,7 @@ static void ParamSet(ByteReader *buf) /* Reserve space at the current sprite ID */ 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; } } @@ -8457,7 +8487,7 @@ static void ParamSet(ByteReader *buf) switch (op) { case 0: /* 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); break; diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index e970f070ae..0d149ee1ff 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -219,7 +219,7 @@ uint32_t AirportResolverObject::GetDebugID() const */ TownScopeResolver *AirportResolverObject::GetTown() { - if (!this->town_scope) { + if (!this->town_scope.has_value()) { Town *t = nullptr; if (this->airport_scope.st != nullptr) { t = this->airport_scope.st->town; @@ -227,9 +227,9 @@ TownScopeResolver *AirportResolverObject::GetTown() t = ClosestTownFromTile(this->airport_scope.tile, UINT_MAX); } 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; } /** diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 39f901e504..7c15ba285b 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -130,8 +130,8 @@ struct AirportSpec { /** Get the index of this spec. */ uint8_t GetIndex() const { - assert(this >= specs && this < endof(specs)); - return (uint8_t)(this - specs); + assert(this >= std::begin(specs) && this < std::end(specs)); + return static_cast(std::distance(std::cbegin(specs), this)); } static const AirportSpec dummy; ///< The dummy airport. @@ -174,7 +174,7 @@ struct AirportScopeResolver : public ScopeResolver { /** Resolver object for airports. */ struct AirportResolverObject : public ResolverObject { AirportScopeResolver airport_scope; - std::unique_ptr town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). AirportResolverObject(TileIndex tile, Station *st, uint8_t airport_id, uint8_t layout, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 86eb580edc..fe8c437e37 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -267,7 +267,7 @@ size_t GRFGetSizeOfDataSection(FILE *f) if (fread(data, 1, header_len, f) == header_len) { if (data[0] == 0 && data[1] == 0 && MemCmpT(data + 2, _grf_cont_v2_sig, 8) == 0) { /* Valid container version 2, get data section size. */ - size_t offset = ((size_t)data[13] << 24) | ((size_t)data[12] << 16) | ((size_t)data[11] << 8) | (size_t)data[10]; + size_t offset = (static_cast(data[13]) << 24) | (static_cast(data[12]) << 16) | (static_cast(data[11]) << 8) | static_cast(data[10]); if (offset >= 1 * 1024 * 1024 * 1024) { DEBUG(grf, 0, "Unexpectedly large offset for NewGRF"); /* Having more than 1 GiB of data is very implausible. Mostly because then diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 1a3bc1d416..2fa1698fa0 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -606,7 +606,7 @@ typedef robin_hood::unordered_flat_map GrfIdMap; // static void FillGrfidMap(const GRFConfig *c, GrfIdMap *grfid_map) { while (c != nullptr) { - grfid_map->insert({c->ident.grfid, c}); + grfid_map->emplace(c->ident.grfid, c); c = c->next; } } diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 6779c9b51e..78936a4400 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -495,24 +495,18 @@ static const GRFFile *GetGrffile(IndustryType type) IndustriesResolverObject::IndustriesResolverObject(TileIndex tile, Industry *indus, IndustryType type, uint32_t random_bits, CallbackID callback, uint32_t callback_param1, uint32_t callback_param2) : ResolverObject(GetGrffile(type), callback, callback_param1, callback_param2), - industries_scope(*this, tile, indus, type, random_bits), - town_scope(nullptr) + industries_scope(*this, tile, indus, type, random_bits) { this->root_spritegroup = GetIndustrySpec(type)->grf_prop.spritegroup[0]; } -IndustriesResolverObject::~IndustriesResolverObject() -{ - delete this->town_scope; -} - /** * Get or create the town scope object associated with the industry. * @return The associated town scope, if it exists. */ TownScopeResolver *IndustriesResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t = nullptr; bool readonly = true; if (this->industries_scope.industry != nullptr) { @@ -522,9 +516,9 @@ TownScopeResolver *IndustriesResolverObject::GetTown() t = ClosestTownFromTile(this->industries_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, readonly); + this->town_scope.emplace(*this, t, readonly); } - return this->town_scope; + return &*this->town_scope; } GrfSpecFeature IndustriesResolverObject::GetFeature() const diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index f478a01127..b415d9557f 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -56,11 +56,10 @@ struct IndustriesScopeResolver : public ScopeResolver { /** Resolver for industries. */ struct IndustriesResolverObject : public ResolverObject { IndustriesScopeResolver industries_scope; ///< Scope resolver for the industry. - TownScopeResolver *town_scope; ///< Scope resolver for the associated town (if needed and available, else \c nullptr). + std::optional town_scope = std::nullopt; ///< Scope resolver for the associated town (if needed and available, else \c std::nullopt). IndustriesResolverObject(TileIndex tile, Industry *indus, IndustryType type, uint32_t random_bits = 0, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ~IndustriesResolverObject(); TownScopeResolver *GetTown(); diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index cad7ca7b4a..00f79dac2c 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -404,16 +404,10 @@ ObjectResolverObject::ObjectResolverObject(const ObjectSpec *spec, Object *obj, CallbackID callback, uint32_t param1, uint32_t param2) : ResolverObject(spec->grf_prop.grffile, callback, param1, param2), object_scope(*this, obj, spec, tile, view) { - this->town_scope = nullptr; this->root_spritegroup = (obj == nullptr && spec->grf_prop.spritegroup[OBJECT_SPRITE_GROUP_PURCHASE] != nullptr) ? spec->grf_prop.spritegroup[OBJECT_SPRITE_GROUP_PURCHASE] : spec->grf_prop.spritegroup[OBJECT_SPRITE_GROUP_DEFAULT]; } -ObjectResolverObject::~ObjectResolverObject() -{ - delete this->town_scope; -} - /** * Get the town resolver scope that belongs to this object resolver. * On the first call, the town scope is created (if possible). @@ -421,7 +415,7 @@ ObjectResolverObject::~ObjectResolverObject() */ TownScopeResolver *ObjectResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t; if (this->object_scope.obj != nullptr) { t = this->object_scope.obj->town; @@ -429,9 +423,9 @@ TownScopeResolver *ObjectResolverObject::GetTown() t = ClosestTownFromTile(this->object_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, this->object_scope.obj == nullptr); + this->town_scope.emplace(*this, t, this->object_scope.obj == nullptr); } - return this->town_scope; + return &*this->town_scope; } GrfSpecFeature ObjectResolverObject::GetFeature() const diff --git a/src/newgrf_object.h b/src/newgrf_object.h index dcb8ffb13c..c716cb2054 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -169,11 +169,10 @@ struct ObjectScopeResolver : public ScopeResolver { /** A resolver object to be used with feature 0F spritegroups. */ struct ObjectResolverObject : public ResolverObject { ObjectScopeResolver object_scope; ///< The object scope resolver. - TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). ObjectResolverObject(const ObjectSpec *spec, Object *o, TileIndex tile, uint8_t view = 0, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); - ~ObjectResolverObject(); ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, VarSpriteGroupScopeOffset relative = 0) override { diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index bdac2a8ae3..5eb045b680 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -276,10 +276,7 @@ const SpriteGroup *RoadStopResolverObject::ResolveReal(const RealSpriteGroup *gr RoadStopResolverObject::RoadStopResolverObject(const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback, uint32_t param1, uint32_t param2) : ResolverObject(roadstopspec->grf_prop.grffile, callback, param1, param2), roadstop_scope(*this, st, roadstopspec, tile, roadtype, type, view) - { - - this->town_scope = nullptr; - +{ CargoID ctype = SpriteGroupCargo::SG_DEFAULT_NA; if (st == nullptr) { @@ -306,14 +303,9 @@ RoadStopResolverObject::RoadStopResolverObject(const RoadStopSpec *roadstopspec, this->root_spritegroup = roadstopspec->grf_prop.spritegroup[ctype]; } -RoadStopResolverObject::~RoadStopResolverObject() -{ - delete this->town_scope; -} - TownScopeResolver *RoadStopResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t; if (this->roadstop_scope.st != nullptr) { t = this->roadstop_scope.st->town; @@ -321,9 +313,9 @@ TownScopeResolver *RoadStopResolverObject::GetTown() t = ClosestTownFromTile(this->roadstop_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, this->roadstop_scope.st == nullptr); + this->town_scope.emplace(*this, t, this->roadstop_scope.st == nullptr); } - return this->town_scope; + return &*this->town_scope; } uint16_t GetRoadStopCallback(CallbackID callback, uint32_t param1, uint32_t param2, const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view) diff --git a/src/newgrf_roadstop.h b/src/newgrf_roadstop.h index 44e1cd5b12..d7f47523fb 100644 --- a/src/newgrf_roadstop.h +++ b/src/newgrf_roadstop.h @@ -116,10 +116,9 @@ private: /** Road stop resolver. */ struct RoadStopResolverObject : public ResolverObject { RoadStopScopeResolver roadstop_scope; ///< The stop scope resolver. - TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). RoadStopResolverObject(const RoadStopSpec *roadstopspec, BaseStation *st, TileIndex tile, RoadType roadtype, StationType type, uint8_t view, CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0); - ~RoadStopResolverObject(); ScopeResolver* GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, VarSpriteGroupScopeOffset relative = 0) override { switch (scope) { diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index d757f41092..94b9a76dc4 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -257,7 +257,7 @@ static struct { */ TownScopeResolver *StationResolverObject::GetTown() { - if (this->town_scope == nullptr) { + if (!this->town_scope.has_value()) { Town *t = nullptr; if (this->station_scope.st != nullptr) { t = this->station_scope.st->town; @@ -265,9 +265,9 @@ TownScopeResolver *StationResolverObject::GetTown() t = ClosestTownFromTile(this->station_scope.tile, UINT_MAX); } if (t == nullptr) return nullptr; - this->town_scope = new TownScopeResolver(*this, t, this->station_scope.st == nullptr); + this->town_scope.emplace(*this, t, this->station_scope.st == nullptr); } - return this->town_scope; + return &*this->town_scope; } uint32_t StationScopeResolver::GetNearbyStationInfo(uint32_t parameter, StationScopeResolver::NearbyStationInfoMode mode) const @@ -598,7 +598,7 @@ uint32_t StationResolverObject::GetDebugID() const StationResolverObject::StationResolverObject(const StationSpec *statspec, BaseStation *base_station, TileIndex tile, RailType rt, CallbackID callback, uint32_t callback_param1, uint32_t callback_param2) : ResolverObject(statspec->grf_prop.grffile, callback, callback_param1, callback_param2), - station_scope(*this, statspec, base_station, tile, rt), town_scope(nullptr) + station_scope(*this, statspec, base_station, tile, rt) { /* Invalidate all cached vars */ _svc.valid = 0; @@ -629,11 +629,6 @@ StationResolverObject::StationResolverObject(const StationSpec *statspec, BaseSt this->root_spritegroup = this->station_scope.statspec->grf_prop.spritegroup[this->station_scope.cargo_type]; } -StationResolverObject::~StationResolverObject() -{ - delete this->town_scope; -} - /** * Resolve sprites for drawing a station tile. * @param statspec Station spec diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 5e8d39b252..6219085c7c 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -59,11 +59,10 @@ private: /** Station resolver. */ struct StationResolverObject : public ResolverObject { StationScopeResolver station_scope; ///< The station scope resolver. - TownScopeResolver *town_scope; ///< The town scope resolver (created on the first call). + std::optional town_scope = std::nullopt; ///< The town scope resolver (created on the first call). StationResolverObject(const StationSpec *statspec, BaseStation *st, TileIndex tile, RailType rt, CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0); - ~StationResolverObject(); TownScopeResolver *GetTown(); diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index 65f35db2ae..d1d139f12f 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -207,6 +207,6 @@ struct PersistentStorage : PersistentStorageArray, PersistentStora } }; -static_assert(cpp_lengthof(OldPersistentStorage, storage) <= cpp_lengthof(PersistentStorage, storage)); +static_assert(std::tuple_size_v <= std::tuple_size_v); #endif /* NEWGRF_STORAGE_H */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 336a36779c..69190e1a63 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -778,7 +778,7 @@ int openttd_main(std::span arguments) std::string sounds_set; std::string music_set; Dimension resolution = {0, 0}; - std::unique_ptr scanner(new AfterNewGRFScan()); + std::unique_ptr scanner = std::make_unique(); bool dedicated = false; bool only_local_path = false; diff --git a/src/order_base.h b/src/order_base.h index ddfcc49391..c42b3792e8 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -178,6 +178,7 @@ public: Order *next; ///< Pointer to next order. If nullptr, end of list Order() : flags(0), refit_cargo(CARGO_NO_REFIT), max_speed(UINT16_MAX) {} + Order(uint8_t type, uint8_t flags, DestinationID dest) : flags(flags), dest(dest), type(type), refit_cargo(CARGO_NO_REFIT), occupancy(0), wait_time(0), travel_time(0), max_speed(UINT16_MAX) {} ~Order(); Order(uint64_t packed); diff --git a/src/order_gui.cpp b/src/order_gui.cpp index b1fec6e864..45e86406e8 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1336,10 +1336,8 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int */ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile) { - /* Hack-ish; unpack order 0, so everything gets initialised with either zero - * or a suitable default value for the variable. Then also override the index - * as it is not coming from a pool, so would be initialised. */ - Order order(0); + /* Override the index as it is not coming from a pool, so would not be initialised correctly. */ + Order order; order.index = 0; /* check depot first */ @@ -3945,8 +3943,8 @@ static constexpr NWidgetPart _nested_orders_train_widgets[] = { EndContainer(), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_OCCUPANCY_TOGGLE), SetMinimalSize(36, 12), SetDataTip(STR_ORDERS_OCCUPANCY_BUTTON, STR_ORDERS_OCCUPANCY_BUTTON_TOOLTIP), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_SHARED), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_ADD_VEH_GROUP), SetMinimalSize(12, 12), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetAspect(1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_ADD_VEH_GROUP), SetAspect(1), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP), EndContainer(), EndContainer(), @@ -4099,8 +4097,8 @@ static constexpr NWidgetPart _nested_orders_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_OCCUPANCY_TOGGLE), SetMinimalSize(36, 12), SetDataTip(STR_ORDERS_OCCUPANCY_BUTTON, STR_ORDERS_OCCUPANCY_BUTTON_TOOLTIP), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_SHARED), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_ADD_VEH_GROUP), SetMinimalSize(12, 12), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetAspect(1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_ADD_VEH_GROUP), SetAspect(1), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP), EndContainer(), EndContainer(), @@ -4158,7 +4156,7 @@ static constexpr NWidgetPart _nested_other_orders_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_OCCUPANCY_TOGGLE), SetMinimalSize(36, 12), SetDataTip(STR_ORDERS_OCCUPANCY_BUTTON, STR_ORDERS_OCCUPANCY_BUTTON_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_O_SHARED_ORDER_LIST), SetAspect(1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 3049da91b3..a32c4ebe29 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -226,7 +226,8 @@ static CTRunDelegateCallbacks _sprite_font_callback = { CFAutoRelease line(CTTypesetterCreateLine(this->typesetter.get(), CFRangeMake(this->cur_offset, len))); this->cur_offset += len; - return std::unique_ptr(line ? new CoreTextLine(std::move(line), this->font_map, this->text_buffer) : nullptr); + if (!line) return nullptr; + return std::make_unique(std::move(line), this->font_map, this->text_buffer); } CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff) : font(font) diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index ee6210e503..9997d817ab 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -408,7 +408,7 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF if (FAILED(ScriptLayout((int)bidi_level.size(), &bidi_level[0], &vis_to_log[0], nullptr))) return nullptr; /* Create line. */ - std::unique_ptr line(new UniscribeLine()); + std::unique_ptr line = std::make_unique(); int cur_pos = 0; for (std::vector::iterator l = vis_to_log.begin(); l != vis_to_log.end(); l++) { diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 6995f9afee..65ead7e896 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1832,23 +1832,23 @@ static constexpr NWidgetPart _nested_station_builder_widgets[] = { NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_ORANGE), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_3), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_4), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_5), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_NUM_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP), EndContainer(), NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_3), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_4), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_5), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_6), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_7), SetMinimalSize(15, 12), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_1), SetAspect(1.25f), SetDataTip(STR_BLACK_1, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_2), SetAspect(1.25f), SetDataTip(STR_BLACK_2, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_3), SetAspect(1.25f), SetDataTip(STR_BLACK_3, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_4), SetAspect(1.25f), SetDataTip(STR_BLACK_4, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_5), SetAspect(1.25f), SetDataTip(STR_BLACK_5, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_6), SetAspect(1.25f), SetDataTip(STR_BLACK_6, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_LEN_7), SetAspect(1.25f), SetDataTip(STR_BLACK_7, STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BRAS_PLATFORM_DRAG_N_DROP), SetMinimalSize(75, 12), SetDataTip(STR_STATION_BUILD_DRAG_DROP, STR_STATION_BUILD_DRAG_DROP_TOOLTIP), @@ -2303,7 +2303,7 @@ static constexpr NWidgetPart _nested_signal_builder_widgets[] = { NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN, WID_BS_CAPTION), SetDataTip(STR_BUILD_SIGNAL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_TOGGLE_SIZE_SEL), - NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_TOGGLE_SIZE), SetDataTip(SPR_LARGE_SMALL_WINDOW, STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP), SetAspect(WidgetDimensions::ASPECT_TOGGLE_SIZE), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), diff --git a/src/random_access_file.cpp b/src/random_access_file.cpp index ec7a710b3b..c3bb884aae 100644 --- a/src/random_access_file.cpp +++ b/src/random_access_file.cpp @@ -36,7 +36,7 @@ RandomAccessFile::RandomAccessFile(const std::string &filename, Subdirectory sub this->simplified_filename = name_without_path.substr(0, name_without_path.rfind('.')); strtolower(this->simplified_filename); - this->SeekTo((size_t)pos, SEEK_SET); + this->SeekTo(static_cast(pos), SEEK_SET); } /** diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 90a2ad21b7..d6ec2f2fbd 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -55,12 +55,6 @@ struct GRPSChunkHandler : ChunkHandler { SlObject(g, slt); if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP; - - if (IsSavegameVersionBefore(SLV_GROUP_LIVERIES)) { - const Company *c = Company::Get(g->owner); - g->livery.colour1 = c->livery[LS_DEFAULT].colour1; - g->livery.colour2 = c->livery[LS_DEFAULT].colour2; - } } } }; diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index a3b779a323..baf2b722e8 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -160,27 +160,27 @@ static const SaveLoad _industry_desc[] = { SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), SLE_CONDREF(Industry, neutral_station, REF_STATION, SLV_SERVE_NEUTRAL_INDUSTRIES, SL_MAX_VERSION), - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_INPUTS, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, INDUSTRY_NUM_INPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_INPUTS, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, INDUSTRY_NUM_INPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), SLE_VAR(Industry, prod_level, SLE_UINT8), - SLE_CONDARR(Industry, this_month_production, SLE_FILE_U16 | SLE_VAR_U32, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, this_month_production, SLE_FILE_U16 | SLE_VAR_U32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, this_month_transported, SLE_FILE_U16 | SLE_VAR_U32, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, this_month_transported, SLE_FILE_U16 | SLE_VAR_U32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, last_month_production, SLE_FILE_U16 | SLE_VAR_U32, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, last_month_production, SLE_FILE_U16 | SLE_VAR_U32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), - SLE_CONDARR(Industry, last_month_transported, SLE_FILE_U16 | SLE_VAR_U32, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), - SLE_CONDARR(Industry, last_month_transported, SLE_FILE_U16 | SLE_VAR_U32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, this_month_production, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, this_month_production, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, this_month_transported, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, this_month_transported, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, last_month_production, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_month_production, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), + SLE_CONDARR(Industry, last_month_transported, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_ORIGINAL_NUM_OUTPUTS, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_month_transported, SLE_FILE_U16 | SLE_VAR_U32, INDUSTRY_NUM_OUTPUTS, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_INDUSTRY_CARGO_REORGANISE), SLE_VAR(Industry, counter, SLE_UINT16), diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 1c87d78712..f281ec864f 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -28,7 +28,7 @@ namespace upstream_sl { */ static Order UnpackVersion4Order(uint16_t packed) { - return Order(GB(packed, 8, 8) << 16 | GB(packed, 4, 4) << 8 | GB(packed, 0, 4)); + return Order(GB(packed, 0, 4), GB(packed, 4, 4), GB(packed, 8, 8)); } /** @@ -105,7 +105,7 @@ struct ORDRChunkHandler : ChunkHandler { SlCopy(&orders[0], len, SLE_UINT32); for (size_t i = 0; i < len; ++i) { - new (i) Order(orders[i]); + new (i) Order(GB(orders[i], 0, 8), GB(orders[i], 8, 8), GB(orders[i], 16, 16)); } } diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 7e14649a2f..4fec09229e 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -85,7 +85,7 @@ public: void Load(Town *t) const override { - size_t length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? (size_t)TAE_END : SlGetStructListLength(TAE_END); + size_t length = IsSavegameVersionBefore(SLV_SAVELOAD_LIST_LENGTH) ? static_cast(TAE_END) : SlGetStructListLength(TAE_END); for (size_t i = 0; i < length; i++) { SlObject(&t->received[i], this->GetLoadDescription()); } diff --git a/src/schdispatch_gui.cpp b/src/schdispatch_gui.cpp index b1acc136c0..60861935da 100644 --- a/src/schdispatch_gui.cpp +++ b/src/schdispatch_gui.cpp @@ -1405,7 +1405,7 @@ void CcSwapSchDispatchSchedules(const CommandCost &result, TileIndex tile, uint3 static constexpr NWidgetPart _nested_schdispatch_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SCHDISPATCH_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_SCHDISPATCH_RENAME_SCHEDULE_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SCHDISPATCH_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_SCHDISPATCH_RENAME_SCHEDULE_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SCHDISPATCH_MOVE_LEFT), SetMinimalSize(12, 14), SetDataTip(SPR_ARROW_LEFT, STR_SCHDISPATCH_MOVE_SCHEDULE), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SCHDISPATCH_MOVE_RIGHT), SetMinimalSize(12, 14), SetDataTip(SPR_ARROW_RIGHT, STR_SCHDISPATCH_MOVE_SCHEDULE), NWidget(WWT_CAPTION, COLOUR_GREY, WID_SCHDISPATCH_CAPTION), SetDataTip(STR_SCHDISPATCH_CAPTION, STR_NULL), diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 1328403085..59ee2d00dd 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -41,8 +41,6 @@ static const char * const SCREENSHOT_NAME = "screenshot"; ///< Default filename static const char * const HEIGHTMAP_NAME = "heightmap"; ///< Default filename of a saved heightmap. std::string _screenshot_format_name; ///< Extension of the current screenshot format (corresponds with #_cur_screenshot_format). -uint _num_screenshot_formats; ///< Number of available screenshot formats. -uint _cur_screenshot_format; ///< Index of the currently selected screenshot format in #_screenshot_formats. static std::string _screenshot_name; ///< Filename of the screenshot file. std::string _full_screenshot_path; ///< Pathname of the screenshot file. uint _heightmap_highest_peak; ///< When saving a heightmap, this contains the highest peak on the map. @@ -600,24 +598,26 @@ static const ScreenshotFormat _screenshot_formats[] = { {"pcx", &MakePCXImage}, }; +/* The currently loaded screenshot format. Set to a valid value as it might be used in early crash logs, when InitializeScreenshotFormats has not been called yet. */ +static const ScreenshotFormat *_cur_screenshot_format = std::begin(_screenshot_formats); + /** Get filename extension of current screenshot file format. */ const char *GetCurrentScreenshotExtension() { - return _screenshot_formats[_cur_screenshot_format].extension; + return _cur_screenshot_format->extension; } /** Initialize screenshot format information on startup, with #_screenshot_format_name filled from the loadsave code. */ void InitializeScreenshotFormats() { - uint j = 0; - for (uint i = 0; i < lengthof(_screenshot_formats); i++) { - if (_screenshot_format_name.compare(_screenshot_formats[i].extension) == 0) { - j = i; - break; + for (auto &format : _screenshot_formats) { + if (_screenshot_format_name == format.extension) { + _cur_screenshot_format = &format; + return; } } - _cur_screenshot_format = j; - _num_screenshot_formats = lengthof(_screenshot_formats); + + _cur_screenshot_format = std::begin(_screenshot_formats); } /** @@ -746,8 +746,7 @@ static const char *MakeScreenshotName(const char *default_fn, const char *ext, b /** Make a screenshot of the current screen. */ static bool MakeSmallScreenshot(bool crashlog) { - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height, + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); } @@ -852,8 +851,7 @@ static bool MakeLargeWorldScreenshot(ScreenshotType t, uint32_t width = 0, uint3 Viewport vp; SetupScreenshotViewport(t, &vp, width, height); - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), LargeWorldCallback, &vp, vp.width, vp.height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); } @@ -900,8 +898,7 @@ bool MakeHeightmapScreenshot(const char *filename) _heightmap_highest_peak = std::max(h, _heightmap_highest_peak); } - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(filename, HeightmapCallback, nullptr, MapSizeX(), MapSizeY(), 8, palette); + return _cur_screenshot_format->proc(filename, HeightmapCallback, nullptr, MapSizeX(), MapSizeY(), 8, palette); } static ScreenshotType _confirmed_screenshot_type; ///< Screenshot type the current query is about to confirm. @@ -1006,8 +1003,7 @@ static bool RealMakeScreenshot(ScreenshotType t, std::string name, uint32_t widt break; case SC_HEIGHTMAP: { - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - ret = MakeHeightmapScreenshot(MakeScreenshotName(HEIGHTMAP_NAME, sf->extension)); + ret = MakeHeightmapScreenshot(MakeScreenshotName(HEIGHTMAP_NAME, _cur_screenshot_format->extension)); break; } @@ -1082,8 +1078,7 @@ static void SmallMapCallback(void *userdata, void *buf, uint y, uint pitch, uint bool MakeSmallMapScreenshot(unsigned int width, unsigned int height, SmallMapWindow *window) { _screenshot_name[0] = '\0'; - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - bool ret = sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), SmallMapCallback, window, width, height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); + bool ret = _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), SmallMapCallback, window, width, height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); ShowScreenshotResultMessage(SC_SMALLMAP, ret); return ret; } @@ -1334,8 +1329,7 @@ bool MakeMinimapWorldScreenshot(const char *name) _screenshot_name.clear(); if (name != nullptr) _screenshot_name.assign(name); - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), MinimapScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), MinimapScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); } /** @@ -1346,8 +1340,7 @@ bool MakeTopographyScreenshot(const char *name) _screenshot_name.clear(); if (name != nullptr) _screenshot_name.assign(name); - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), TopographyScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), TopographyScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); } /** @@ -1358,6 +1351,5 @@ bool MakeIndustryScreenshot(const char *name) _screenshot_name.clear(); if (name != nullptr) _screenshot_name.assign(name); - const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), IndustryScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); + return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), IndustryScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); } diff --git a/src/screenshot.h b/src/screenshot.h index 616354a7ac..403a792a29 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -43,8 +43,6 @@ void SetScreenshotAuxiliaryText(const char *key, const char *value); inline void ClearScreenshotAuxiliaryText() { SetScreenshotAuxiliaryText(nullptr, nullptr); } extern std::string _screenshot_format_name; -extern uint _num_screenshot_formats; -extern uint _cur_screenshot_format; extern std::string _full_screenshot_path; #endif /* SCREENSHOT_H */ diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 25c8a3c688..44dffbd0c1 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -318,7 +318,7 @@ ScriptObject::ActiveInstance::~ActiveInstance() /* static */ void ScriptObject::SetCallbackVariable(int index, int value) { - if ((size_t)index >= GetStorage()->callback_value.size()) GetStorage()->callback_value.resize(index + 1); + if (static_cast(index) >= GetStorage()->callback_value.size()) GetStorage()->callback_value.resize(index + 1); GetStorage()->callback_value[index] = value; } diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 90f7d16826..09047647a0 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -1297,7 +1297,7 @@ static constexpr NWidgetPart _nested_script_debug_widgets[] = { /* Break string widgets */ NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCRD_BREAK_STRING_WIDGETS), NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_SCRD_BREAK_STR_ON_OFF_BTN), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP), + NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_SCRD_BREAK_STR_ON_OFF_BTN), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(NWID_HORIZONTAL), NWidget(WWT_LABEL, COLOUR_GREY), SetPadding(2, 2, 2, 4), SetDataTip(STR_AI_DEBUG_BREAK_ON_LABEL, 0x0), diff --git a/src/settings.cpp b/src/settings.cpp index 394530f758..6fa566df52 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -238,7 +238,7 @@ const uint16_t INIFILE_VERSION = (IniFileVersion)(IFV_MAX_VERSION - 1); ///< Cur * @param str the current value of the setting for which a value needs found * @param len length of the string * @param many full domain of values the ONEofMANY setting can have - * @return the integer index of the full-list, or -1 if not found + * @return the integer index of the full-list, or SIZE_MAX if not found */ size_t OneOfManySettingDesc::ParseSingleValue(const char *str, size_t len, const std::vector &many) { @@ -251,7 +251,7 @@ size_t OneOfManySettingDesc::ParseSingleValue(const char *str, size_t len, const idx++; } - return (size_t)-1; + return SIZE_MAX; } /** @@ -273,7 +273,7 @@ std::optional BoolSettingDesc::ParseSingleValue(const char *str) * @param many full domain of values the MANYofMANY setting can have * @param str the current string value of the setting, each individual * of separated by a whitespace,tab or | character - * @return the 'fully' set integer, or -1 if a set is not found + * @return the 'fully' set integer, or SIZE_MAX if a set is not found */ static size_t LookupManyOfMany(const std::vector &many, const char *str) { @@ -290,7 +290,7 @@ static size_t LookupManyOfMany(const std::vector &many, const char while (*s != 0 && *s != ' ' && *s != '\t' && *s != '|') s++; r = OneOfManySettingDesc::ParseSingleValue(str, s - str, many); - if (r == (size_t)-1) return r; + if (r == SIZE_MAX) return r; SetBit(res, (uint8_t)r); // value found, set it if (*s == 0) break; @@ -300,24 +300,20 @@ static size_t LookupManyOfMany(const std::vector &many, const char } /** - * Parse an integerlist string and set each found value - * @param p the string to be parsed. Each element in the list is separated by a - * comma or a space character - * @param items pointer to the integerlist-array that will be filled with values - * @param maxitems the maximum number of elements the integerlist-array has - * @return returns the number of items found, or -1 on an error + * Parse a string into a vector of uint32s. + * @param p the string to be parsed. Each element in the list is separated by a comma or a space character + * @return std::optional with a vector of parsed integers. The optional is empty upon an error. */ -template -static int ParseIntList(const char *p, T *items, size_t maxitems) +static std::optional> ParseIntList(const char *p) { - size_t n = 0; // number of items read so far bool comma = false; // do we accept comma? + std::vector result; while (*p != '\0') { switch (*p) { case ',': /* Do not accept multiple commas between numbers */ - if (!comma) return -1; + if (!comma) return std::nullopt; comma = false; [[fallthrough]]; @@ -326,12 +322,11 @@ static int ParseIntList(const char *p, T *items, size_t maxitems) break; default: { - if (n == maxitems) return -1; // we don't accept that many numbers char *end; unsigned long v = std::strtoul(p, &end, 0); - if (p == end) return -1; // invalid character (not a number) - if (sizeof(T) < sizeof(v)) v = Clamp(v, std::numeric_limits::min(), std::numeric_limits::max()); - items[n++] = v; + if (p == end) return std::nullopt; // invalid character (not a number) + + result.push_back(ClampTo(v)); p = end; // first non-number comma = true; // we accept comma now break; @@ -341,52 +336,35 @@ static int ParseIntList(const char *p, T *items, size_t maxitems) /* If we have read comma but no number after it, fail. * We have read comma when (n != 0) and comma is not allowed */ - if (n != 0 && !comma) return -1; + if (!result.empty() && !comma) return std::nullopt; - return ClampTo(n); + return result; } /** * Load parsed string-values into an integer-array (intlist) * @param str the string that contains the values (and will be parsed) * @param array pointer to the integer-arrays that will be filled - * @param nelems the number of elements the array holds. Maximum is 64 elements + * @param nelems the number of elements the array holds. * @param type the type of elements the array holds (eg INT8, UINT16, etc.) * @return return true on success and false on error */ static bool LoadIntList(const char *str, void *array, int nelems, VarType type) { - unsigned long items[64]; - int i, nitems; - + size_t elem_size = SlVarSize(type); if (str == nullptr) { - memset(items, 0, sizeof(items)); - nitems = nelems; - } else { - nitems = ParseIntList(str, items, lengthof(items)); - if (nitems != nelems) return false; + memset(array, 0, nelems * elem_size); + return true; } - switch (type) { - case SLE_VAR_BL: - case SLE_VAR_I8: - case SLE_VAR_U8: - for (i = 0; i != nitems; i++) ((uint8_t*)array)[i] = items[i]; - break; - - case SLE_VAR_I16: - case SLE_VAR_U16: - for (i = 0; i != nitems; i++) ((uint16_t*)array)[i] = items[i]; - break; - - case SLE_VAR_I32: - case SLE_VAR_U32: - for (i = 0; i != nitems; i++) ((uint32_t*)array)[i] = items[i]; - break; + auto opt_items = ParseIntList(str); + if (!opt_items.has_value() || opt_items->size() != (size_t)nelems) return false; - default: NOT_REACHED(); + char *p = static_cast(array); + for (auto item : *opt_items) { + WriteValue(p, type, item); + p += elem_size; } - return true; } @@ -487,8 +465,8 @@ size_t OneOfManySettingDesc::ParseValue(const char *str) const size_t r = OneOfManySettingDesc::ParseSingleValue(str, strlen(str), this->many); /* if the first attempt of conversion from string to the appropriate value fails, * look if we have defined a converter from old value to new value. */ - if (r == (size_t)-1 && this->many_cnvt != nullptr) r = this->many_cnvt(str); - if (r != (size_t)-1) return r; // and here goes converted value + if (r == SIZE_MAX && this->many_cnvt != nullptr) r = this->many_cnvt(str); + if (r != SIZE_MAX) return r; // and here goes converted value ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE); msg.SetDParamStr(0, str); @@ -500,7 +478,7 @@ size_t OneOfManySettingDesc::ParseValue(const char *str) const size_t ManyOfManySettingDesc::ParseValue(const char *str) const { size_t r = LookupManyOfMany(this->many, str); - if (r != (size_t)-1) return r; + if (r != SIZE_MAX) return r; ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE); msg.SetDParamStr(0, str); msg.SetDParamStr(1, this->name); @@ -2519,15 +2497,13 @@ static void GraphicsSetLoadConfig(IniFile &ini) if (const IniItem *item = group->GetItem("extra_version"); item != nullptr && item->value) BaseGraphics::ini_data.extra_version = std::strtoul(item->value->c_str(), nullptr, 10); if (const IniItem *item = group->GetItem("extra_params"); item != nullptr && item->value) { - auto &extra_params = BaseGraphics::ini_data.extra_params; - extra_params.resize(0x80); // TODO: make ParseIntList work nicely with C++ containers - int count = ParseIntList(item->value->c_str(), &extra_params.front(), extra_params.size()); - if (count < 0) { + auto params = ParseIntList(item->value->c_str()); + if (params.has_value()) { + BaseGraphics::ini_data.extra_params = params.value(); + } else { SetDParamStr(0, BaseGraphics::ini_data.name); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_ARRAY, WL_CRITICAL); - count = 0; } - extra_params.resize(count); } } } @@ -2588,13 +2564,13 @@ static GRFConfig *GRFLoadConfig(const IniFile &ini, const char *grpname, bool is /* Parse parameters */ if (item.value.has_value() && !item.value->empty()) { - int count = ParseIntList(item.value->c_str(), c->param.data(), c->param.size()); - if (count < 0) { + auto params = ParseIntList(item.value->c_str()); + if (params.has_value()) { + c->SetParams(params.value()); + } else { SetDParamStr(0, filename); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_ARRAY, WL_CRITICAL); - count = 0; } - c->num_params = count; } /* Check if item is valid */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index cbcc900d3a..b4e711d111 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -100,16 +100,13 @@ static uint GetCurrentResolutionIndex() static void ShowCustCurrency(); /** Window for displaying the textfile of a BaseSet. */ -template struct BaseSetTextfileWindow : public TextfileWindow { - const TBaseSet *baseset; ///< View the textfile of this BaseSet. - StringID content_type; ///< STR_CONTENT_TYPE_xxx for title. + const std::string name; ///< Name of the content. + const StringID content_type; ///< STR_CONTENT_TYPE_xxx for title. - BaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) : TextfileWindow(file_type), baseset(baseset), content_type(content_type) + BaseSetTextfileWindow(TextfileType file_type, const std::string &name, const char *textfile, StringID content_type) : TextfileWindow(file_type), name(name), content_type(content_type) { this->ConstructWindow(); - - const char *textfile = this->baseset->GetTextfile(file_type); this->LoadTextfile(textfile, BASESET_DIR); } @@ -117,7 +114,7 @@ struct BaseSetTextfileWindow : public TextfileWindow { { if (widget == WID_TF_CAPTION) { SetDParam(0, content_type); - SetDParamStr(1, this->baseset->name); + SetDParamStr(1, this->name); } } }; @@ -132,7 +129,7 @@ template void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet *baseset, StringID content_type) { CloseWindowById(WC_TEXTFILE, file_type); - new BaseSetTextfileWindow(file_type, baseset, content_type); + new BaseSetTextfileWindow(file_type, baseset->name, baseset->GetTextfile(file_type), content_type); } template @@ -1100,7 +1097,7 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_SURVEY_PARTICIPATE_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_SURVEY_PARTICIPATE_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_SURVEY_PREVIEW_BUTTON), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW, STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP), @@ -1117,11 +1114,11 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_GUI_SCALE), SetMinimalSize(67, 0), SetMinimalTextLines(1, 12 + WidgetDimensions::unscaled.vsep_normal, FS_SMALL), SetFill(0, 0), SetDataTip(0x0, STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_SCALE_AUTO, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_AUTO), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_AUTO), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_SCALE_BEVELS, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_BEVEL_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_BEVEL_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetDataTip(STR_GAME_OPTIONS_GUI_SCALE_MAIN_TOOLBAR, STR_NULL), @@ -1131,11 +1128,11 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { #ifdef HAS_TRUETYPE_FONT NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_FONT_SPRITE, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_SPRITE), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_SPRITE), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_FONT_AA, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_AA), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_AA), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP), EndContainer(), #endif /* HAS_TRUETYPE_FONT */ EndContainer(), @@ -1153,16 +1150,16 @@ static constexpr NWidgetPart _nested_game_options_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_FULLSCREEN, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_FULLSCREEN_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_FULLSCREEN_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_VIDEO_ACCELERATION, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_ACCEL_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_ACCEL_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP), EndContainer(), #ifndef __APPLE__ NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_VIDEO_VSYNC, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_VSYNC_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_VIDEO_VSYNC_BUTTON), SetAspect(WidgetDimensions::ASPECT_SETTINGS_BUTTON), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP), EndContainer(), #endif NWidget(NWID_HORIZONTAL), diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 095e1d8e59..38c74cd6fa 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -535,7 +535,7 @@ static constexpr NWidgetPart _nested_query_sign_edit_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_QES_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), SetTextStyle(TC_WHITE), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_QES_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_EDIT_SIGN_LOCATION_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_QES_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_EDIT_SIGN_LOCATION_TOOLTIP), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QES_TEXT), SetMinimalSize(256, 12), SetDataTip(STR_EDIT_SIGN_SIGN_OSKTITLE, STR_NULL), SetPadding(2, 2, 2, 2), diff --git a/src/sl/oldloader_sl.cpp b/src/sl/oldloader_sl.cpp index b8b0fecc5b..a357d9e1e9 100644 --- a/src/sl/oldloader_sl.cpp +++ b/src/sl/oldloader_sl.cpp @@ -467,7 +467,7 @@ static inline Colours RemapTTOColour(Colours tto) COLOUR_WHITE, COLOUR_LIGHT_BLUE, COLOUR_MAUVE, COLOUR_PINK }; - if ((size_t)tto >= lengthof(tto_colour_remap)) return COLOUR_GREY; // this shouldn't happen + if (static_cast(tto) >= std::size(tto_colour_remap)) return COLOUR_GREY; // this shouldn't happen return tto_colour_remap[tto]; } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 0af326f930..f58b706894 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1765,6 +1765,7 @@ public: this->fill_y = (display->fill_y == 0 && bar->fill_y == 0) ? 0 : std::min(display->fill_y, bar->fill_y); this->resize_x = std::max(display->resize_x, bar->resize_x); this->resize_y = std::min(display->resize_y, bar->resize_y); + this->ApplyAspectRatio(); } void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override diff --git a/src/social_integration.cpp b/src/social_integration.cpp index facc36f479..2bab3f0d83 100644 --- a/src/social_integration.cpp +++ b/src/social_integration.cpp @@ -59,14 +59,14 @@ public: void Scan() { #ifdef _WIN32 - std::string extension = "-social.dll"; + const char *extension = "-social.dll"; #elif defined(__APPLE__) - std::string extension = "-social.dylib"; + const char *extension = "-social.dylib"; #else - std::string extension = "-social.so"; + const char *extension = "-social.so"; #endif - this->FileScanner::Scan(extension.c_str(), SOCIAL_INTEGRATION_DIR, false); + this->FileScanner::Scan(extension, SOCIAL_INTEGRATION_DIR, false); } bool AddFile(const std::string &filename, size_t basepath_length, const std::string &) override diff --git a/src/sound.cpp b/src/sound.cpp index 6c6d98c2bd..86e597b18b 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -117,7 +117,7 @@ static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound) assert(sound != nullptr); /* Check for valid sound size. */ - if (sound->file_size == 0 || sound->file_size > ((size_t)-1) - 2) return false; + if (sound->file_size == 0 || sound->file_size > SIZE_MAX - 2) return false; if (!(sound->bits_per_sample == 8 || sound->bits_per_sample == 16)) { DEBUG(sound, 0, "SetBankSource: Incorrect bits_per_sample: %u", sound->bits_per_sample); diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index edbf79b3d3..376b6073b4 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -68,7 +68,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f */ if (num < 0 || num > 64 * 1024 * 1024) return WarnCorruptSprite(file, file_pos, __LINE__); - std::unique_ptr dest_orig(new uint8_t[num]); + std::unique_ptr dest_orig = std::make_unique(num); uint8_t *dest = dest_orig.get(); const int64_t dest_size = num; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index a5aa08f1f1..71e6304ebb 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4967,9 +4967,9 @@ uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, Sourc } if (used_stations.empty()) { used_stations.reserve(2); - used_stations.emplace_back(std::make_pair(first_station, 0)); + used_stations.emplace_back(first_station, 0); } - used_stations.emplace_back(std::make_pair(st, 0)); + used_stations.emplace_back(st, 0); } /* no stations around at all? */ diff --git a/src/station_gui.cpp b/src/station_gui.cpp index dcedc223cc..ccc0a833df 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -855,12 +855,12 @@ static constexpr NWidgetPart _nested_company_stations_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRAIN), SetMinimalSize(14, 0), SetDataTip(STR_TRAIN, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRUCK), SetMinimalSize(14, 0), SetDataTip(STR_LORRY, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_BUS), SetMinimalSize(14, 0), SetDataTip(STR_BUS, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_SHIP), SetMinimalSize(14, 0), SetDataTip(STR_SHIP, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_AIRPLANE), SetMinimalSize(14, 0), SetDataTip(STR_PLANE, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_FACILALL), SetMinimalSize(14, 0), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_FACILITIES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRAIN), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_TRAIN, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRUCK), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_LORRY, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_BUS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_BUS, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_SHIP), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_SHIP, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_AIRPLANE), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_PLANE, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_FACILALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_FACILITIES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(5, 0), SetFill(0, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_STL_CARGODROPDOWN), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(), @@ -901,9 +901,9 @@ void ShowCompanyStations(CompanyID company) static constexpr NWidgetPart _nested_station_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SV_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, 0x0), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SV_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, 0x0), NWidget(WWT_CAPTION, COLOUR_GREY, WID_SV_CAPTION), SetDataTip(STR_STATION_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SV_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_STATION_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SV_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_STATION_VIEW_CENTER_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), @@ -932,10 +932,10 @@ static constexpr NWidgetPart _nested_station_view_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CLOSE_AIRPORT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_STATION_VIEW_CLOSE_AIRPORT, STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_CATCHMENT), SetMinimalSize(45, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_BUTTON_CATCHMENT, STR_TOOLTIP_CATCHMENT), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_TRAINS), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_TRAIN, STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_ROADVEHS), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_LORRY, STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SHIPS), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_PLANES), SetMinimalSize(14, 12), SetFill(0, 1), SetDataTip(STR_PLANE, STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_TRAINS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_TRAIN, STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_ROADVEHS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_LORRY, STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SHIPS), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_SHIP, STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_PLANES), SetAspect(WidgetDimensions::ASPECT_VEHICLE_ICON), SetFill(0, 1), SetDataTip(STR_PLANE, STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/stdafx.h b/src/stdafx.h index b67d7daf82..6d3c224ecf 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -358,14 +358,6 @@ char (&ArraySizeHelper(T (&array)[N]))[N]; */ #define cpp_sizeof(base, variable) (sizeof(((base*)8)->variable)) -/** - * Gets the length of an array variable within a class. - * @param base The class the variable is in. - * @param variable The array variable to get the size of. - * @return the length of the array - */ -#define cpp_lengthof(base, variable) (cpp_sizeof(base, variable) / cpp_sizeof(base, variable[0])) - /* take care of some name clashes on MacOS */ #if defined(__APPLE__) @@ -462,7 +454,7 @@ inline void free(const void *ptr) * The largest value that can be entered in a variable * @param type the type of the variable */ -#define MAX_UVALUE(type) ((type)~(type)0) +#define MAX_UVALUE(type) (static_cast(~static_cast(0))) #if defined(_MSC_VER) && !defined(_DEBUG) # define IGNORE_UNINITIALIZED_WARNING_START __pragma(warning(push)) __pragma(warning(disable:4700)) diff --git a/src/string_func.h b/src/string_func.h index a1d123d072..b1556d2c18 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -111,7 +111,7 @@ inline bool StrEmpty(const char *s) inline size_t ttd_strnlen(const char *str, size_t maxlen) { const char *t; - for (t = str; (size_t)(t - str) < maxlen && *t != '\0'; t++) {} + for (t = str; static_cast(t - str) < maxlen && *t != '\0'; t++) {} return t - str; } diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index 03bff1a3f9..66e5a0b773 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -158,7 +158,7 @@ cat = SC_BASIC ; workaround for implicit lengthof() in SDTG_LIST [SDTG_LIST] name = ""resolution"" -type = SLE_INT +type = SLE_UINT length = 2 var = _cur_resolution def = ""0,0"" diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 4e8e7d09c5..38b4a7b97f 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -555,9 +555,9 @@ static constexpr NWidgetPart _nested_scen_edit_land_gen_widgets[] = { NWidget(NWID_SPACER), SetFill(1, 0), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), - NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_INCREASE_SIZE), SetMinimalSize(12, 12), SetDataTip(SPR_ARROW_UP, STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_INCREASE_SIZE), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetDataTip(SPR_ARROW_UP, STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA), NWidget(NWID_SPACER), SetMinimalSize(0, 1), - NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_DECREASE_SIZE), SetMinimalSize(12, 12), SetDataTip(SPR_ARROW_DOWN, STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_DECREASE_SIZE), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetDataTip(SPR_ARROW_DOWN, STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA), NWidget(NWID_SPACER), SetFill(0, 1), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(2, 0), diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 073a92da77..7467b13e1d 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -342,7 +342,7 @@ void TextfileWindow::CheckHyperlinkClick(Point pt) /* Found character index in line, check if any links are at that position. */ for (const auto &link : found_links) { Debug(misc, 4, "Checking link from char {} to {}", link.begin, link.end); - if ((size_t)char_index >= link.begin && (size_t)char_index < link.end) { + if (static_cast(char_index) >= link.begin && static_cast(char_index) < link.end) { Debug(misc, 4, "Activating link with destination: {}", link.destination); this->OnHyperlinkClick(link); return; diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 0325de2e58..ab7a11bfac 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -1256,7 +1256,7 @@ static constexpr NWidgetPart _nested_timetable_widgets[] = { EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_SEL_SHARED), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VT_SHARED_ORDER_LIST), SetFill(0, 1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VT_SHARED_ORDER_LIST), SetAspect(1), SetFill(0, 1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_ADD_VEH_GROUP), SetFill(0, 1), SetDataTip(STR_BLACK_PLUS, STR_ORDERS_NEW_GROUP_TOOLTIP), EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VT_LOCK_ORDER_TIME), SetFill(0, 1), SetDataTip(SPR_LOCK, STR_TIMETABLE_LOCK_ORDER_TIME_TOOLTIP), diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 3da9bdf7a7..828a033c33 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2203,7 +2203,7 @@ void UpdateTownRadius(Town *t) return; } - if (t->cache.num_houses < 92) { + if (t->cache.num_houses < std::size(_town_squared_town_zone_radius_data) * 4) { t->cache.squared_town_zone_radius = _town_squared_town_zone_radius_data[t->cache.num_houses / 4]; } else { int mass = t->cache.num_houses / 8; @@ -3166,7 +3166,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile) uint cur_prob = hs.probability; probability_max += cur_prob; - probs.emplace_back(std::make_pair(hs.Index(), cur_prob)); + probs.emplace_back(hs.Index(), cur_prob); } TileIndex baseTile = tile; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 4b22fedf25..cf3faa47ed 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -819,9 +819,9 @@ public: static constexpr NWidgetPart _nested_town_game_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_TV_CAPTION), SetDataTip(STR_TOWN_VIEW_TOWN_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_BROWN), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), @@ -850,9 +850,9 @@ static WindowDesc _town_game_view_desc(__FILE__, __LINE__, static constexpr NWidgetPart _nested_town_editor_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CHANGE_NAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_TOWN_VIEW_RENAME_TOOLTIP), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_TV_CAPTION), SetDataTip(STR_TOWN_VIEW_TOWN_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_TV_CENTER_VIEW), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_TOWN_VIEW_CENTER_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_BROWN), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 253f3b0bec..d3520f5ed2 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -3531,7 +3531,7 @@ static constexpr NWidgetPart _nested_program_widgets[] = { NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, TR_WIDGET_CAPTION), SetDataTip(STR_TRACE_RESTRICT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_DEBUGBOX, COLOUR_GREY), - NWidget(WWT_IMGBTN, COLOUR_GREY, TR_WIDGET_HIGHLIGHT), SetMinimalSize(12, 12), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_TRACE_RESTRICT_HIGHLIGHT_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_GREY, TR_WIDGET_HIGHLIGHT), SetAspect(1), SetDataTip(SPR_SHARED_ORDERS_ICON, STR_TRACE_RESTRICT_HIGHLIGHT_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), @@ -3545,8 +3545,8 @@ static constexpr NWidgetPart _nested_program_widgets[] = { /* Button Bar */ NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, TR_WIDGET_UP_BTN), SetMinimalSize(12, 12), SetDataTip(SPR_ARROW_UP, STR_TRACE_RESTRICT_UP_BTN_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, TR_WIDGET_DOWN_BTN), SetMinimalSize(12, 12), SetDataTip(SPR_ARROW_DOWN, STR_TRACE_RESTRICT_DOWN_BTN_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, TR_WIDGET_UP_BTN), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetDataTip(SPR_ARROW_UP, STR_TRACE_RESTRICT_UP_BTN_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, TR_WIDGET_DOWN_BTN), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetDataTip(SPR_ARROW_DOWN, STR_TRACE_RESTRICT_DOWN_BTN_TOOLTIP), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(NWID_SELECTION, INVALID_COLOUR, TR_WIDGET_SEL_TOP_LEFT_2), NWidget(WWT_DROPDOWN, COLOUR_GREY, TR_WIDGET_TYPE_NONCOND), SetMinimalSize(124, 12), SetFill(1, 0), @@ -3593,7 +3593,7 @@ static constexpr NWidgetPart _nested_program_widgets[] = { SetDataTip(STR_EMPTY, STR_NULL), SetResize(1, 0), EndContainer(), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, TR_WIDGET_GOTO_SIGNAL), SetMinimalSize(12, 12), SetDataTip(SPR_GOTO_LOCATION, STR_TRACE_RESTRICT_GOTO_SIGNAL_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, TR_WIDGET_GOTO_SIGNAL), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_TRACE_RESTRICT_GOTO_SIGNAL_TOOLTIP), EndContainer(), /* Second button row. */ diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 64cece06bc..c30c467f01 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1820,9 +1820,9 @@ static constexpr NWidgetPart _nested_vehicle_list[] = { NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), SetFill(1, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetFill(0, 1), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_STOP_ALL), SetMinimalSize(12, 12), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_STOP_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_START_ALL), SetMinimalSize(12, 12), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VL_START_ALL), SetAspect(WidgetDimensions::ASPECT_VEHICLE_FLAG), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP), EndContainer(), /* Widget to be shown for other companies hiding the previous 5 widgets. */ @@ -1920,6 +1920,17 @@ uint GetVehicleListHeight(VehicleType type, uint divisor) return base + (rem == 0 ? 0 : divisor - rem); } +/** + * Get width required for the formatted unit number display. + * @param digits Number of digits required for unit number. + * @return Required width in pixels. + */ +static int GetUnitNumberWidth(int digits) +{ + SetDParamMaxDigits(0, digits); + return GetStringBoundingBox(STR_JUST_COMMA).width; +} + /** * Draw all the vehicle list items. * @param selected_vehicle The vehicle that is to be highlighted. @@ -1932,7 +1943,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int bool rtl = _current_text_dir == TD_RTL; Dimension profit = GetSpriteSize(SPR_PROFIT_LOT); - int text_offset = std::max(profit.width, GetDigitWidth() * this->unitnumber_digits) + WidgetDimensions::scaled.hsep_normal; + int text_offset = std::max(profit.width, GetUnitNumberWidth(this->unitnumber_digits)) + WidgetDimensions::scaled.hsep_normal; Rect tr = ir.Indent(text_offset, rtl); bool show_orderlist = this->vli.vtype >= VEH_SHIP; @@ -3649,9 +3660,9 @@ static void ShowVehicleDetailsWindow(const Vehicle *v) static constexpr NWidgetPart _nested_vehicle_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NULL /* filled in later */), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_NULL /* filled in later */), NWidget(WWT_CAPTION, COLOUR_GREY, WID_VV_CAPTION), SetDataTip(STR_VEHICLE_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_IMGBTN, COLOUR_GREY, WID_VV_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_NULL /* filled in later */), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_VV_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_NULL /* filled in later */), NWidget(WWT_DEBUGBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), @@ -3683,7 +3694,7 @@ static constexpr NWidgetPart _nested_vehicle_view_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_VV_START_STOP), SetResize(1, 0), SetFill(1, 0), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_ORDER_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_VV_ORDER_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index 40dc116bee..2ebba42d90 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -220,9 +220,9 @@ public: static constexpr NWidgetPart _nested_waypoint_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_BUOY_VIEW_CHANGE_BUOY_NAME), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_RENAME), SetAspect(WidgetDimensions::ASPECT_RENAME), SetDataTip(SPR_RENAME, STR_BUOY_VIEW_CHANGE_BUOY_NAME), NWidget(WWT_CAPTION, COLOUR_GREY, WID_W_CAPTION), SetDataTip(STR_WAYPOINT_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_CENTER_VIEW), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_BUOY_VIEW_CENTER_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_W_CENTER_VIEW), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_BUOY_VIEW_CENTER_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_GREY), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), diff --git a/src/widget.cpp b/src/widget.cpp index 79e2fd71bb..c9c4e204b1 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -927,6 +927,20 @@ NWidgetBase *NWidgetBase::GetWidgetOfType(WidgetType tp) return (this->type == tp) ? this : nullptr; } +void NWidgetBase::ApplyAspectRatio() +{ + if (this->aspect_ratio == 0) return; + if (this->smallest_x == 0 || this->smallest_y == 0) return; + + uint x = this->smallest_x; + uint y = this->smallest_y; + if ((this->aspect_flags & AspectFlags::ResizeX) == AspectFlags::ResizeX) x = std::max(this->smallest_x, static_cast(this->smallest_y * std::abs(this->aspect_ratio))); + if ((this->aspect_flags & AspectFlags::ResizeY) == AspectFlags::ResizeY) y = std::max(this->smallest_y, static_cast(this->smallest_x / std::abs(this->aspect_ratio))); + + this->smallest_x = x; + this->smallest_y = y; +} + void NWidgetBase::AdjustPaddingForZoom() { this->padding = ScaleGUITrad(this->uz_padding); @@ -944,6 +958,28 @@ NWidgetResizeBase::NWidgetResizeBase(WidgetType tp, uint fill_x, uint fill_y) : this->fill_y = fill_y; } +/** + * Set desired aspect ratio of this widget. + * @param ratio Desired aspect ratio, or 0 for none. + * @param flags Dimensions which should be resized. + */ +void NWidgetResizeBase::SetAspect(float ratio, AspectFlags flags) +{ + this->aspect_ratio = ratio; + this->aspect_flags = flags; +} + +/** + * Set desired aspect ratio of this widget, in terms of horizontal and vertical dimensions. + * @param x_ratio Desired horizontal component of aspect ratio. + * @param y_ratio Desired vertical component of aspect ratio. + * @param flags Dimensions which should be resized. + */ +void NWidgetResizeBase::SetAspect(int x_ratio, int y_ratio, AspectFlags flags) +{ + this->SetAspect(static_cast(x_ratio) / static_cast(y_ratio), flags); +} + void NWidgetResizeBase::AdjustPaddingForZoom() { if (!this->absolute) { @@ -1256,6 +1292,7 @@ void NWidgetStacked::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); return; } @@ -1279,6 +1316,7 @@ void NWidgetStacked::SetupSmallestSize(Window *w) this->fill_y = std::lcm(this->fill_y, child_wid->fill_y); this->resize_x = std::lcm(this->resize_x, child_wid->resize_x); this->resize_y = std::lcm(this->resize_y, child_wid->resize_y); + this->ApplyAspectRatio(); } } @@ -1468,6 +1506,11 @@ void NWidgetHorizontal::SetupSmallestSize(Window *w) this->smallest_y = cur_height; // Smallest height got changed, try again. } /* 2. For containers that must maintain equal width, extend child minimal size. */ + for (const auto &child_wid : this->children) { + child_wid->smallest_y = this->smallest_y - child_wid->padding.Vertical(); + child_wid->ApplyAspectRatio(); + longest = std::max(longest, child_wid->smallest_x); + } if (this->flags & NC_EQUALSIZE) { for (const auto &child_wid : this->children) { if (child_wid->fill_x == 1) child_wid->smallest_x = longest; @@ -1657,6 +1700,11 @@ void NWidgetVertical::SetupSmallestSize(Window *w) this->smallest_x = cur_width; // Smallest width got changed, try again. } /* 2. For containers that must maintain equal width, extend children minimal size. */ + for (const auto &child_wid : this->children) { + child_wid->smallest_x = this->smallest_x - child_wid->padding.Horizontal(); + child_wid->ApplyAspectRatio(); + highest = std::max(highest, child_wid->smallest_y); + } if (this->flags & NC_EQUALSIZE) { for (const auto &child_wid : this->children) { if (child_wid->fill_y == 1) child_wid->smallest_y = highest; @@ -1793,6 +1841,7 @@ void NWidgetSpacer::SetupSmallestSize(Window *) { this->smallest_x = this->min_x; this->smallest_y = this->min_y; + this->ApplyAspectRatio(); } void NWidgetSpacer::FillWidgetLookup(WidgetLookup &) @@ -1909,6 +1958,7 @@ void NWidgetMatrix::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); } void NWidgetMatrix::AssignSizePosition(SizingType, int x, int y, uint given_width, uint given_height, bool) @@ -2167,6 +2217,7 @@ void NWidgetBackground::SetupSmallestSize(Window *w) this->smallest_x += this->child->padding.Horizontal(); this->smallest_y += this->child->padding.Vertical(); } + this->ApplyAspectRatio(); } else { Dimension d = {this->min_x, this->min_y}; Dimension fill = {this->fill_x, this->fill_y}; @@ -2195,6 +2246,7 @@ void NWidgetBackground::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); } } @@ -2293,6 +2345,7 @@ void NWidgetViewport::SetupSmallestSize(Window *) { this->smallest_x = this->min_x; this->smallest_y = this->min_y; + this->ApplyAspectRatio(); } void NWidgetViewport::Draw(const Window *w) @@ -2597,9 +2650,13 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, WidgetID index, uint32_t case WWT_MATRIX: case NWID_BUTTON_DROPDOWN: case NWID_PUSHBUTTON_DROPDOWN: + this->SetFill(0, 0); + break; + case WWT_ARROWBTN: case WWT_PUSHARROWBTN: this->SetFill(0, 0); + this->SetAspect(WidgetDimensions::ASPECT_LEFT_RIGHT_BUTTON); break; case WWT_EDITBOX: @@ -2618,24 +2675,28 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, WidgetID index, uint32_t this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_STICKYBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_STICKY); + this->SetAspect(this->min_x, this->min_y); break; case WWT_SHADEBOX: this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_SHADEBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_SHADE); + this->SetAspect(this->min_x, this->min_y); break; case WWT_DEBUGBOX: this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_DEBUGBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_DEBUG); + this->SetAspect(this->min_x, this->min_y); break; case WWT_DEFSIZEBOX: this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_DEFSIZEBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_DEFSIZE); + this->SetAspect(this->min_x, this->min_y); break; case WWT_RESIZEBOX: @@ -2648,6 +2709,7 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, WidgetID index, uint32_t this->SetFill(0, 0); this->SetMinimalSize(WidgetDimensions::WD_CLOSEBOX_WIDTH, WidgetDimensions::WD_CAPTION_HEIGHT); this->SetDataTip(STR_NULL, STR_TOOLTIP_CLOSE_WINDOW); + this->SetAspect(this->min_x, this->min_y); break; case WWT_DROPDOWN: @@ -2836,6 +2898,7 @@ void NWidgetLeaf::SetupSmallestSize(Window *w) this->fill_y = fill.height; this->resize_x = resize.width; this->resize_y = resize.height; + this->ApplyAspectRatio(); } void NWidgetLeaf::Draw(const Window *w) @@ -3150,6 +3213,13 @@ static const NWidgetPart *MakeNWidget(const NWidgetPart *nwid_begin, const NWidg break; } + case WPT_ASPECT: { + if (dest == nullptr) [[unlikely]] throw std::runtime_error("WPT_ASPECT requires NWidgetBase"); + dest->aspect_ratio = nwid_begin->u.aspect.ratio; + dest->aspect_flags = nwid_begin->u.aspect.flags; + break; + } + case WPT_ENDCONTAINER: return nwid_begin; diff --git a/src/widget_type.h b/src/widget_type.h index c0e5cd2610..0bb69a2572 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -104,6 +104,7 @@ enum WidgetType : uint8_t { WPT_ENDCONTAINER, ///< Widget part to denote end of a container. WPT_FUNCTION, ///< Widget part for calling a user function. WPT_SCROLLBAR, ///< Widget part for attaching a scrollbar. + WPT_ASPECT, ///< Widget part for sepcifying aspect ratio. /* Pushable window widget types. */ WWT_MASK = 0x7F, @@ -131,6 +132,13 @@ enum SizingType { ST_RESIZE, ///< Resize the nested widget tree. }; +enum class AspectFlags : uint8_t { + ResizeX = 1U << 0, + ResizeY = 1U << 1, + ResizeXY = ResizeX | ResizeY, +}; +DECLARE_ENUM_AS_BIT_SET(AspectFlags) + /* Forward declarations. */ class NWidgetCore; class Scrollbar; @@ -148,6 +156,7 @@ class NWidgetBase : public ZeroedMemoryAllocator { public: NWidgetBase(WidgetType tp); + void ApplyAspectRatio(); virtual void AdjustPaddingForZoom(); virtual void SetupSmallestSize(Window *w) = 0; virtual void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) = 0; @@ -246,6 +255,8 @@ public: /* Current widget size (that is, after resizing). */ uint current_x; ///< Current horizontal size (after resizing). uint current_y; ///< Current vertical size (after resizing). + float aspect_ratio = 0; ///< Desired aspect ratio of widget. + AspectFlags aspect_flags = AspectFlags::ResizeX; ///< Which dimensions can be resized. int pos_x; ///< Horizontal position of top-left corner of the widget in the window. int pos_y; ///< Vertical position of top-left corner of the widget in the window. @@ -319,6 +330,8 @@ public: void SetMinimalTextLines(uint8_t min_lines, uint8_t spacing, FontSize size); void SetFill(uint fill_x, uint fill_y); void SetResize(uint resize_x, uint resize_y); + void SetAspect(float ratio, AspectFlags flags = AspectFlags::ResizeX); + void SetAspect(int x_ratio, int y_ratio, AspectFlags flags = AspectFlags::ResizeX); bool UpdateMultilineWidgetSize(const std::string &str, int max_lines); bool UpdateSize(uint min_x, uint min_y); @@ -878,7 +891,7 @@ public: template auto GetVisibleRangeIterators(Tcontainer &container) const { - assert((size_t)this->GetCount() == container.size()); // Scrollbar and container size must match. + assert(static_cast(this->GetCount()) == container.size()); // Scrollbar and container size must match. auto first = std::next(std::begin(container), this->GetPosition()); auto last = std::next(first, std::min(this->GetCapacity(), this->GetCount() - this->GetPosition())); return std::make_pair(first, last); @@ -895,15 +908,13 @@ public: * @return Iterator to the element clicked at. If clicked at a wrong position, returns as interator to the end of the container. */ template - typename Tcontainer::iterator GetScrolledItemFromWidget(Tcontainer &container, int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const + auto GetScrolledItemFromWidget(Tcontainer &container, int clickpos, const Window * const w, WidgetID widget, int padding = 0, int line_height = -1) const { - assert((size_t)this->GetCount() == container.size()); // Scrollbar and container size must match. + assert(static_cast(this->GetCount()) == container.size()); // Scrollbar and container size must match. size_type row = this->GetScrolledRowFromWidget(clickpos, w, widget, padding, line_height); if (row == Scrollbar::npos) return std::end(container); - typename Tcontainer::iterator it = std::begin(container); - std::advance(it, row); - return it; + return std::next(std::begin(container), row); } EventState UpdateListPositionOnKeyPress(int &list_position, uint16_t keycode) const; @@ -1100,6 +1111,11 @@ struct NWidgetPartAlignment { StringAlignment align; ///< Alignment of text/image. }; +struct NWidgetPartAspect { + float ratio; + AspectFlags flags; +}; + /** * Pointer to function returning a nested widget. * @return Nested widget (tree). @@ -1123,6 +1139,7 @@ struct NWidgetPart { NWidgetPartAlignment align; ///< Part with internal alignment. NWidgetFunctionType *func_ptr; ///< Part with a function call. NWidContainerFlags cont_flags; ///< Part with container flags. + NWidgetPartAspect aspect; ///< Part to set aspect ratio. /* Constructors for each NWidgetPartUnion data type. */ constexpr NWidgetPartUnion() : xy() {} @@ -1136,6 +1153,7 @@ struct NWidgetPart { constexpr NWidgetPartUnion(NWidgetPartAlignment align) : align(align) {} constexpr NWidgetPartUnion(NWidgetFunctionType *func_ptr) : func_ptr(func_ptr) {} constexpr NWidgetPartUnion(NWidContainerFlags cont_flags) : cont_flags(cont_flags) {} + constexpr NWidgetPartUnion(NWidgetPartAspect aspect) : aspect(aspect) {} } u; /* Constructors for each NWidgetPart data type. */ @@ -1150,6 +1168,7 @@ struct NWidgetPart { constexpr NWidgetPart(WidgetType type, NWidgetPartAlignment align) : type(type), u(align) {} constexpr NWidgetPart(WidgetType type, NWidgetFunctionType *func_ptr) : type(type), u(func_ptr) {} constexpr NWidgetPart(WidgetType type, NWidContainerFlags cont_flags) : type(type), u(cont_flags) {} + constexpr NWidgetPart(WidgetType type, NWidgetPartAspect aspect) : type(type), u(aspect) {} }; /** @@ -1321,6 +1340,17 @@ constexpr NWidgetPart SetScrollbar(WidgetID index) return NWidgetPart{WPT_SCROLLBAR, NWidgetPartWidget{INVALID_COLOUR, index}}; } +/** + * Widget part function for setting the aspect ratio. + * @param ratio Desired aspect ratio, or 0 for none. + * @param flags Dimensions which should be resized. + * @ingroup NestedWidgetParts + */ +constexpr NWidgetPart SetAspect(float ratio, AspectFlags flags = AspectFlags::ResizeX) +{ + return NWidgetPart{WPT_ASPECT, NWidgetPartAspect{ratio, flags}}; +} + /** * Widget part function for starting a new 'real' widget. * @param tp Type of the new nested widget. diff --git a/src/window_gui.h b/src/window_gui.h index 549b6e6697..9e3e586e08 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -71,6 +71,15 @@ public: static const WidgetDimensions unscaled; ///< Unscaled widget dimensions. static WidgetDimensions scaled; ///< Widget dimensions scaled for current zoom level. + static constexpr float ASPECT_LOCATION = 12.f / 14.f; + static constexpr float ASPECT_RENAME = 12.f / 14.f; + static constexpr float ASPECT_SETTINGS_BUTTON = 21.f / 12.f; + static constexpr float ASPECT_TOGGLE_SIZE = 12.f / 14.f; + static constexpr float ASPECT_LEFT_RIGHT_BUTTON = 8.f / 12.f; + static constexpr float ASPECT_UP_DOWN_BUTTON = 11.f / 12.f; + static constexpr float ASPECT_VEHICLE_ICON = 15.f / 12.f; + static constexpr float ASPECT_VEHICLE_FLAG = 11.f / 12.f; + private: /** * Distances used in drawing widgets.