From 9976293c1ecb952db0b74e265313f8aecbce35e0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 26 May 2023 19:32:41 +0100 Subject: [PATCH 01/18] Codechange: Return fontcache font name as std::string. --- src/fontcache.h | 2 +- src/fontcache/freetypefontcache.cpp | 2 +- src/fontcache/spritefontcache.h | 2 +- src/os/macosx/font_osx.h | 2 +- src/os/macosx/string_osx.cpp | 2 +- src/os/windows/font_win32.h | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fontcache.h b/src/fontcache.h index 3241723f76..6f9958f889 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -134,7 +134,7 @@ public: * Get the name of this font. * @return The name of the font. */ - virtual const char *GetFontName() = 0; + virtual std::string GetFontName() = 0; /** * Get the font cache of a given font size. diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index 0a8a1af53f..a9cc9b9a07 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -42,7 +42,7 @@ public: ~FreeTypeFontCache(); void ClearFontCache() override; GlyphID MapCharToGlyph(WChar key) override; - const char *GetFontName() override { return face->family_name; } + std::string GetFontName() override { return face->family_name; } bool IsBuiltInFont() override { return false; } const void *GetOSHandle() override { return &face; } }; diff --git a/src/fontcache/spritefontcache.h b/src/fontcache/spritefontcache.h index a47b4ac18f..ce74972b3e 100644 --- a/src/fontcache/spritefontcache.h +++ b/src/fontcache/spritefontcache.h @@ -31,7 +31,7 @@ public: virtual bool GetDrawGlyphShadow(); virtual GlyphID MapCharToGlyph(WChar key) { assert(IsPrintable(key)); return SPRITE_GLYPH | key; } virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return nullptr; } - virtual const char *GetFontName() { return "sprite"; } + virtual std::string GetFontName() { return "sprite"; } virtual bool IsBuiltInFont() { return true; } }; diff --git a/src/os/macosx/font_osx.h b/src/os/macosx/font_osx.h index 7b58bc772c..72518c5676 100644 --- a/src/os/macosx/font_osx.h +++ b/src/os/macosx/font_osx.h @@ -30,7 +30,7 @@ public: void ClearFontCache() override; GlyphID MapCharToGlyph(WChar key) override; - const char *GetFontName() override { return font_name.c_str(); } + std::string GetFontName() override { return font_name; } bool IsBuiltInFont() override { return false; } const void *GetOSHandle() override { return font.get(); } }; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index e6c37249ec..52feb74c9b 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -178,7 +178,7 @@ static CTRunDelegateCallbacks _sprite_font_callback = { if (font == nullptr) { if (!_font_cache[i.second->fc->GetSize()]) { /* Cache font information. */ - CFAutoRelease font_name(CFStringCreateWithCString(kCFAllocatorDefault, i.second->fc->GetFontName(), kCFStringEncodingUTF8)); + CFAutoRelease font_name(CFStringCreateWithCString(kCFAllocatorDefault, i.second->fc->GetFontName().c_str(), kCFStringEncodingUTF8)); _font_cache[i.second->fc->GetSize()].reset(CTFontCreateWithName(font_name.get(), i.second->fc->GetFontSize(), nullptr)); } font = _font_cache[i.second->fc->GetSize()].get(); diff --git a/src/os/windows/font_win32.h b/src/os/windows/font_win32.h index b83b2c5f35..7f5f62a7f2 100644 --- a/src/os/windows/font_win32.h +++ b/src/os/windows/font_win32.h @@ -34,7 +34,7 @@ public: ~Win32FontCache(); void ClearFontCache() override; GlyphID MapCharToGlyph(WChar key) override; - const char *GetFontName() override { return this->fontname.c_str(); } + std::string GetFontName() override { return this->fontname; } const void *GetOSHandle() override { return &this->logfont; } }; From bae18978264269d9b8865c6b51da3e9b0aa77e87 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 26 May 2023 19:33:09 +0100 Subject: [PATCH 02/18] Change: Include font style in font name for Freetype. --- src/fontcache/freetypefontcache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index a9cc9b9a07..df66b73c2b 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -42,7 +42,7 @@ public: ~FreeTypeFontCache(); void ClearFontCache() override; GlyphID MapCharToGlyph(WChar key) override; - std::string GetFontName() override { return face->family_name; } + std::string GetFontName() override { return fmt::format("{}, {}", face->family_name, face->style_name); } bool IsBuiltInFont() override { return false; } const void *GetOSHandle() override { return &face; } }; From c9c6721a47a566f8991af8ab40e8f149651c165b Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 28 May 2023 18:42:42 +0000 Subject: [PATCH 03/18] Update: Translations from eints esperanto: 44 changes by legoscia --- src/lang/esperanto.txt | 57 ++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 902475ba87..b381b4c771 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -408,6 +408,7 @@ STR_SORT_BY_POWER_VS_RUNNING_COST :Potenco/Irkosto STR_SORT_BY_CARGO_CAPACITY :Ŝarĝkapablo STR_SORT_BY_RANGE :Atingopovo STR_SORT_BY_POPULATION :Enloĝantaro +STR_SORT_BY_RATING :Takso STR_SORT_BY_NUM_VEHICLES :Nombro de veturiloj STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Ensuma profito pasintjare STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Ensuma profito ĉi-jare @@ -510,8 +511,8 @@ STR_FILE_MENU_EXIT :Fermu ###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mondomapo STR_MAP_MENU_EXTRA_VIEWPORT :Plia vidujo -STR_MAP_MENU_LINGRAPH_LEGEND :Legendo de ŝarĝfluo -STR_MAP_MENU_SIGN_LIST :Afiŝa listo +STR_MAP_MENU_LINGRAPH_LEGEND :Klarigeto de ŝarĝfluo +STR_MAP_MENU_SIGN_LIST :Listo de ŝildoj # Town menu ###length 2 @@ -586,6 +587,7 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Baskuligi Konzolon STR_ABOUT_MENU_AI_DEBUG :AI/Ludo skripto sencimigo STR_ABOUT_MENU_SCREENSHOT :Ekranfoto +STR_ABOUT_MENU_SHOW_FRAMERATE :Montru bildrapidon STR_ABOUT_MENU_ABOUT_OPENTTD :Pri 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Bildeto-liniigilo STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Montri/ne montri limigujo @@ -1238,7 +1240,7 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}Neniu ta # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Agordoj STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtroteksto: -STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Etendu ĉio +STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Etendu ĉion STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Maletendu ĉiujn STR_CONFIG_SETTING_COLLAPSE_ALL.n :{BLACK}Collapse all STR_CONFIG_SETTING_RESET_ALL :{BLACK}Restarigu ĉiujn valorojn @@ -1273,6 +1275,8 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Kompaniaj agord STR_CONFIG_SETTINGS_NONE :{WHITE}- Neniu - ###length 3 +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Montru ĉiujn serĉrezultojn ŝanĝante{}{SILVER}Kategorion {BLACK}al {WHITE}{STRING} +STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Montru ĉiujn serĉrezultojn ŝanĝante{}{SILVER}Kategorion {BLACK}al {WHITE}{STRING}{BLACK}kaj {SILVER}Tipon {BLACK}al {WHITE}Ĉiuj agordoj ###length 3 STR_CONFIG_SETTING_OFF :Malaktiva @@ -1369,7 +1373,7 @@ STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Deklivkruteco por stratveturiloj: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Kruteco de dekliva kahelo por stratveturilo. Kun pli alta valoro estas pli malfacile supreniri altaĵon -STR_CONFIG_SETTING_FORBID_90_DEG :Vagonaroj kaj ŝipoj ne ort-turniĝu: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :Malpermesi al trajnoj fari 90-gradajn turnojn: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-gradaj turnoj ekzistas kiam horizontalan relpecon tuj sekvas vertikala relpeco sur apuda kahelo, tiel ke la trajno devas turniĝi 90 gradojn trairante la randon de la relo, anstataŭ la kutimaj 45 gradoj por aliaj kombinoj de relpecoj STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permesu ligi staciojn ne rekte najbarajn: {STRING} @@ -1442,6 +1446,7 @@ STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permesu ĝiri m STR_CONFIG_SETTING_FREIGHT_TRAINS :Pezpliigo pro ŝarĝo por imiti pezajn trajnojn: {STRING} STR_CONFIG_SETTING_PLANE_SPEED :Aviadila rapidecfaktoro: {STRING} +STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Agordu la relativan rapidecon de aviadiloj kompare al aliaj tipoj de veturiloj, por malpliigi enspezojn de transportado per aviadilo STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Nombro da aviadilokraŝoj: {STRING} @@ -1494,6 +1499,7 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} monato{ STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER.n :{COMMA} monato{P 0 "" j}n post STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimuma mono por anstataŭado: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimuma monkvanto kiu devas resti en la banko antaŭ eventuala aŭtomata renovigo de veturiloj STR_CONFIG_SETTING_ERRMSG_DURATION :Daŭro de erarmesaĝo: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekundo{P 0 "" j} @@ -1525,6 +1531,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Denseco de fabr STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Agordu kiom da fabrikoj estu generitaj, kaj kiu nivelo estu tenata dum la ludo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimuma distanco de la maprando por olea industrio: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limigu kiom for de la eĝo de la mapo konstrueblas olerafinejoj kaj oleplatformoj. Ĉe insulaj mapoj, tio certigas ke ili estos proksime de la bordo. Ĉe mapoj pli grandaj ol 256 kaheloj, tiu ĉi agordo estos laŭskale grandigita. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Neĝregiona alto: {STRING} @@ -1604,6 +1611,7 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Glata rulumado STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Regu kiel la ĉefa vidujo rulumas al specifa pozicio kiam oni klakas en la mapeto aŭ petas rulumi al specifa objekto sur la mapo. Se tiu ĉi agordo estas aktiva, la vidujo rulumas glate, se malaktiva, ĝi tuj saltas al la celpunkto STR_CONFIG_SETTING_MEASURE_TOOLTIP :Montru mezuran konsilbalonon ĉe uzo de konstruiloj: {STRING} +STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Montru kahel-distancojn kaj altec-diferencojn dum mustrenado por konstruado STR_CONFIG_SETTING_LIVERIES :Montru veturiltipe specifajn liverojn: {STRING} ###length 3 @@ -1632,6 +1640,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Unuobla klako ( STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Unuobla klako (tuj) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Uzu relajsan servon: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se konektado al la servilo malsukcesas, eblas uzi relajsan servon por starigi konekton. La agordo "neniam" malpermesas tion, "demandu" demandos unue, "permesu" permesas sen peti konfirmon ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Neniam STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Demandu @@ -1760,6 +1769,7 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :Malfacila STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permesu ArtefaritajnIntelektojn en pluropaj ludoj: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permesu ke Artefarit-Inteligentaj (AI) komputilaj ludantoj partoprenu en pluropaj ludoj +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maksimuma memoruzo por ĉiu skripto: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kiom da memoro unuopa skripto rajtas konsumi antaŭ ol ĝi estos devige haltigita. Povas esti necese altigi tiun ĉi agordon por grandaj mapoj. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB @@ -1855,8 +1865,9 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Glata STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Frostigita -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Dum trenado, metu semaforojn je ĉiu: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} kahelo{P 0 "" j} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Dum mustrenado, metu semaforojn je ĉiu: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA}a kahelo +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Dum trenado, tenu fiksitan distancon inter semaforoj: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Elektu kiel funkcias dismeto de semaforoj dum Stir+trenado. Se tiu ĉi agordo estas malaktiva, semaforoj estos metitaj ĉirkaŭ tuneloj aŭ pontoj por eviti longajn sekciojn sen semaforoj. Se tiu ĉi agordo estas aktiva, semaforoj estos metitaj je ĉiu N-a kahelo, por faciligi laŭliniigon de semaforoj sur paralelaj trakoj STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Aŭtomate konstruu semaforojn antaŭ: {STRING} @@ -1902,7 +1913,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Kiom da ŝarĝo STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadrata (originala) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineara -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :En ludo metanta de arbojn: {STRING} +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Dumluda metado de arboj: {STRING} ###length 4 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Kresku sed ne disvastiĝu {RED}(malfunkciigas lignejojn) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Kresku kaj disvastiĝu ĉie @@ -1955,6 +1966,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Komenca urbgran STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Averaĝa grandeco de urbegoj rilate al normalaj urboj je la komenco de la ludo STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Ĝisdatigu la distribuan grafeon {P 0:2 "ĉiun" "ĉiujn"} {STRING}{NBSP}{P 0:2 "sekundon" "sekundojn"} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Uzu {STRING}{NBSP}sekundo{P 0:2 n jn} por rekalkulado de la distribua grafeo STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribua reĝimo por pasaĝeroj: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetria" signifas ke proksimume la sama nombro de pasaĝeroj iros de stacio A al stacio B kiel de B al A. "Malsimetria" signifas ke ajnaj nombroj de pasaĝeroj povas iri en ajnan direkton. "Permana" signifas ke ne estos aŭtomata distribuado de pasaĝeroj. @@ -1973,6 +1985,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Akurateco de di STR_CONFIG_SETTING_DEMAND_DISTANCE :Efiko de distanco al postulado: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Se vi agordas tion ĉi al valoro pli alta ol 0, la distanco inter la stacio A kie iu ŝarĝo originis kaj ebla celpunkto B efikos al la kvanto de ŝarĝo sendota de A al B. Ju pli for B estas de A, des malpli da ŝarĝo estos sendota. Ju pli alte vi agordas la valoron, des malpli da ŝarĝo estos sendata al foraj stacioj kaj des pli da ŝarĝo estos sendata al proksimaj stacioj. STR_CONFIG_SETTING_DEMAND_SIZE :Kvanto de revenanta ŝarĝo por simetria reĝimo: {STRING} +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Se vi agordas tion ĉi al malpli ol 100%, la simetria distribuado kondutos pli kiel la malsimetria. Malpli da ŝarĝo estos devige sendata reen se certa kvanto estas sendata al iu stacio. Se vi agordas ĝin al 0%, la simetria distribuado kondutos ekzakte kiel la malsimetria. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturado de mallongaj vojoj antaŭ ol uzi altkapacitajn vojojn: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte ekzistas pluraj vojoj inter ajnaj du stacioj. La ŝarĝdistribua algoritmo unue saturos la plej mallongan vojon, poste uzos la duan plej mallongan vojon ĝis ĝi estos saturita, kaj tiel plu. Saturado estas determinita de takso de kapacito kaj planita uzado. Post kiam ĉiuj vojoj estas saturitaj, se ankoraŭ estas postulado, ĝi superŝutos ĉiujn vojojn, preferante la plej altkapacitajn. Tamen plej ofte la algoritmo malakurate taksos kapaciton. Per tiu ĉi agordo vi povas indiki ĝis kiu procentaĵo mallonga vojo devas esti saturita en la unua paŝo antaŭ ol elekti la sekvan pli longan. Agordu ĝin al malpli ol 100% por eviti superŝutitajn staciojn kaze de trotaksita kapacito. @@ -2022,6 +2035,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Angla-usona sis STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metra (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI-unuoj (m) +STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Loka adaptado STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafiko STR_CONFIG_SETTING_SOUND :{ORANGE}Sonefektoj STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interfaco @@ -2065,13 +2079,17 @@ STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... supe STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... ignoras la NewGRF-on '{STRING}': ĝi havas GRF-ID-duoblaĵon kun '{STRING}' STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... ignoras malvalidan NewGRF-on '{STRING}': {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :ne troveblas +STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :malsekura por statika uzo +STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :sistema NewGRF STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :malkongrua kun tiu ĉi versio de OpenTTD STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :nekonata STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... la kompaktignivelo '{STRING}' estas malvalida +STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... ludokonserva formato '{STRING}' ne estas havebla. Reiras al '{STRING}' STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignoras Bazan Grafikaron '{STRING}': ne trovebla STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignoras Bazan Sonaron '{STRING}': ne trovebla STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignoras Bazan Muzikaron '{STRING}': ne trovebla STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memormanko +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Asignado de {BYTES} por bildeta kaŝmemoro malsukcesis. La bildeta kaŝmemoro estis reduktita al {BYTES}. Tio ĉi igos OpenTTD funkcii pli malrapide. Por malpliigi la memorbezonon vi povas provi malŝalti grafikon kun 32 bitoj rastrumere kaj/aŭ zom-nivelojn. # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Eraro pri videaj agordoj... @@ -2383,6 +2401,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Publika STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Tra relajso STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Forbaru +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Forigi STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Administra ago STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Ĉu vi certas ke vi volas forbari la ludanton '{STRING}'? @@ -2474,6 +2493,7 @@ STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :estis sendanta STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :ne ricevis pasvorton ene de la tempolimo STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :ĝenerala tempolimo STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :elŝutado de mapo daŭris tro longe +STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :prilaborado de la mapo daŭris tro longe STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :malvalida klientonomo # Network related errors @@ -2504,6 +2524,7 @@ STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ŝ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} donis {2:CURRENCY_LONG} al {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}La servilo fermis la seancon STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}La servilo restartiĝas...{}Bonvolu atendi... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} estis forbatita. Kialo: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Servila registrado malsukcesis STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Alia servilo kun la sama invitokodo registris sin. Ŝaltas al "loka" ludotipo. @@ -2562,6 +2583,7 @@ STR_CONTENT_TYPE_HEIGHTMAP :Altecmapo STR_CONTENT_TYPE_BASE_SOUNDS :Bazaj sonoj STR_CONTENT_TYPE_BASE_MUSIC :Baza muziko STR_CONTENT_TYPE_GAME_SCRIPT :Ludoskripto +STR_CONTENT_TYPE_GS_LIBRARY :Ludoskripta kodoteko # Content downloading progress window STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Enhavo elŝutiĝas... @@ -2599,6 +2621,7 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Baskulig STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Igu objektojn nevideblaj anstataŭ travideblaj # Linkgraph legend window +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Klarigeto de ŝarĝfluo STR_LINKGRAPH_LEGEND_ALL :{BLACK}Ĉiuj STR_LINKGRAPH_LEGEND_NONE :{BLACK}Neniaj STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Elektu kiujn kompaniojn montri @@ -2693,6 +2716,7 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombina STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Vojrezerva semaforo (elektra){}Vojrezerva semaforo ebligas ke pli ol unu trajno eniru signalan blokon samtempe, se la trajno povas rezervi vojon ĝis sekura haltopunkto. Normalan vojrezervan semaforon eblas trapasi de la malantaŭa flanko STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Unudirekta vojrezerva semaforo (elektra){}Vojrezerva semaforo ebligas ke pli ol unu trajno eniru signalan blokon samtempe, se la trajno povas rezervi vojon ĝis sekura haltopunkto. Unudirektan vojrezervan semaforon ne eblas trapasi de la malantaŭa flanko STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distanco inter semaforoj dum trenado +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Malpliigu semaforan distancon dum trenado STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Pliigu semaforan distancon dum trenado # Bridge selection window @@ -3043,6 +3067,7 @@ STR_FRAMERATE_CAPTION :{WHITE}Bildrapi STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_CURRENT :{WHITE}Nuna STR_FRAMERATE_AVERAGE :{WHITE}Averaĝa +STR_FRAMERATE_MEMORYUSE :{WHITE}Memory STR_FRAMERATE_DATA_POINTS :{BLACK}La datumoj baziĝas je {COMMA} mezuroj STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms @@ -3121,6 +3146,7 @@ STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Pliigu n STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Malpliigu neĝan kovron je dek procentoj STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_DESERT_COVERAGE :{BLACK}Dezerta kovro: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Pliigu dezertan kovron je dek procentoj STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Malpliigu dezertan kovron je dek procentoj STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terentipo: @@ -3249,6 +3275,9 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kon STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paletro: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Defaŭlta (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Defaŭlta (D) / po 32 bitoj por rastrumero +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Malnova (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Malnova (W) / po 32 bitoj por rastrumero STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametroj: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Neniuj @@ -3346,7 +3375,7 @@ STR_NEWGRF_LIST_MISSING :{RED}Mankaj dos STR_NEWGRF_BROKEN :{WHITE}La konduto de la NewGRF '{0:STRING}' verŝajne kaŭzos malsinkroniĝojn kaj/aŭ paneojn STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ĝi ŝanĝis la veturilan longecon de '{1:ENGINE}' dum ĝi ne estis en garaĝo STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Ĝi ŝanĝis la veturilan kapaciton de '{1:ENGINE}' dum ĝi ne estis en garaĝo aŭ readaptiĝanta -STR_BROKEN_VEHICLE_LENGTH :{WHITE}La trajno '{VEHICLE}' aparenanta al '{COMPANY}' havas malvalidan longecon. Tion verŝajne kaŭzis problemoj pri NewGRF-oj. La ludo eventuale malsinkroniĝos aŭ paneos +STR_BROKEN_VEHICLE_LENGTH :{WHITE}La trajno '{VEHICLE}' apartenanta al '{COMPANY}' havas malvalidan longecon. Tion verŝajne kaŭzis problemoj pri NewGRF-oj. La ludo eventuale malsinkroniĝos aŭ paneos STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' donas malĝustan informon STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}'Revoko' {1:HEX} revenis nekonatan/malvalidan rezulton {2:HEX} @@ -3368,12 +3397,12 @@ STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} Ne STR_NEWGRF_SCAN_ARCHIVES :Trovas por arĥivoj # Sign list window -STR_SIGN_LIST_CAPTION :{WHITE}Signolisto - {COMMA} Signo{P "" j} +STR_SIGN_LIST_CAPTION :{WHITE}Ŝildolisto - {COMMA} ŝildo{P "" j} STR_SIGN_LIST_MATCH_CASE :{BLACK}Parigu kazon STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Aktivu/Malaktivu parigan kazon dum komparanta signajn nomojn kontraŭ la filtra teksto # Sign window -STR_EDIT_SIGN_CAPTION :{WHITE}Ŝanĝu afiŝan tekston +STR_EDIT_SIGN_CAPTION :{WHITE}Ŝanĝu tekston de la ŝildo STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrigu ĉefvidon je la loko de la ŝildo. Stir+Klak malfermas novan vidujon ĉe la loko de la ŝildo STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Iri al la sekva signo STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Iri al la antaŭa signo @@ -3580,6 +3609,8 @@ STR_FINANCES_YEAR :{WHITE}{NUM} ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Enspezo +STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Operaciaj elspezoj +STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitalaj elspezoj ###length 13 @@ -4563,8 +4594,8 @@ STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GRE STR_INCOME_FLOAT_INCOME :{GREEN}Enspezo: {CURRENCY_LONG} STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Transigo: {CURRENCY_LONG} STR_FEEDER :{YELLOW}Transigo: {CURRENCY_LONG} -STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Tradona: {CURRENCY_LONG}{WHITE} / {GREEN}Revenuo: {CURRENCY_LONG} -STR_FEEDER_INCOME :{YELLOW}Tradona: {CURRENCY_LONG}{WHITE} / {GREEN}Revenuo: {CURRENCY_LONG} +STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Tradona: {CURRENCY_LONG}{WHITE} / {GREEN}Enspezo: {CURRENCY_LONG} +STR_FEEDER_INCOME :{YELLOW}Tradona: {CURRENCY_LONG}{WHITE} / {GREEN}Enspezo: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Tradona: {CURRENCY_LONG}{WHITE} / {RED}Kosta: {CURRENCY_LONG} STR_FEEDER_COST :{YELLOW}Tradona: {CURRENCY_LONG}{WHITE} / {RED}Kosto: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Atendata Kosto: {CURRENCY_LONG} @@ -5437,7 +5468,7 @@ STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hanga # _SERIAL version of AIRACRAFT doesn't exist STR_UNKNOWN_STATION :nekonata stacio -STR_DEFAULT_SIGN_NAME :Signo +STR_DEFAULT_SIGN_NAME :Ŝildo STR_COMPANY_SOMEONE :iu STR_SAVEGAME_NAME_DEFAULT :{COMPANY} je {STRING} From 702194cfef599f6ce1ef1796b4ae011f67987183 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 29 May 2023 06:48:43 +0100 Subject: [PATCH 04/18] Change: Cargo flow legend only shows defined cargo. (#10872) This removes the large mostly-empty grid of cargo buttons when not using a complex industry set. --- src/linkgraph/linkgraph_gui.cpp | 72 ++++++++++++++++----------------- src/linkgraph/linkgraph_gui.h | 1 + 2 files changed, 35 insertions(+), 38 deletions(-) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 077bf422c0..1a4265cf1c 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -474,30 +474,32 @@ NWidgetBase *MakeSaturationLegendLinkGraphGUI(int *biggest_index) NWidgetBase *MakeCargoesLegendLinkGraphGUI(int *biggest_index) { - static const uint ENTRIES_PER_ROW = CeilDiv(NUM_CARGO, 5); - NWidgetVertical *panel = new NWidgetVertical(NC_EQUALSIZE); - NWidgetHorizontal *row = nullptr; - for (uint i = 0; i < NUM_CARGO; ++i) { - if (i % ENTRIES_PER_ROW == 0) { - if (row) panel->Add(row); - row = new NWidgetHorizontal(NC_EQUALSIZE); + uint num_cargo = static_cast(_sorted_cargo_specs.size()); + static const uint ENTRIES_PER_COL = 5; + NWidgetHorizontal *panel = new NWidgetHorizontal(NC_EQUALSIZE); + NWidgetVertical *col = nullptr; + + for (uint i = 0; i < num_cargo; ++i) { + if (i % ENTRIES_PER_COL == 0) { + if (col != nullptr) panel->Add(col); + col = new NWidgetVertical(NC_EQUALSIZE); } NWidgetBackground * wid = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, i + WID_LGL_CARGO_FIRST); wid->SetMinimalSize(25, 0); wid->SetMinimalTextLines(1, 0, FS_SMALL); wid->SetFill(1, 1); wid->SetResize(0, 0); - row->Add(wid); + col->Add(wid); } /* Fill up last row */ - for (uint i = 0; i < 4 - (NUM_CARGO - 1) % 5; ++i) { + for (uint i = num_cargo; i < Ceil(num_cargo, ENTRIES_PER_COL); ++i) { NWidgetSpacer *spc = new NWidgetSpacer(25, 0); spc->SetMinimalTextLines(1, 0, FS_SMALL); spc->SetFill(1, 1); spc->SetResize(0, 0); - row->Add(spc); + col->Add(spc); } - panel->Add(row); + panel->Add(col); *biggest_index = WID_LGL_CARGO_LAST; return panel; } @@ -553,6 +555,8 @@ void ShowLinkGraphLegend() LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc *desc, int window_number) : Window(desc) { + this->num_cargo = _sorted_cargo_specs.size(); + this->InitNested(window_number); this->InvalidateData(0); this->SetOverlay(GetMainWindow()->viewport->overlay); @@ -571,10 +575,8 @@ void LinkGraphLegendWindow::SetOverlay(std::shared_ptr overlay } } CargoTypes cargoes = this->overlay->GetCargoMask(); - for (uint c = 0; c < NUM_CARGO; c++) { - if (!this->IsWidgetDisabled(WID_LGL_CARGO_FIRST + c)) { - this->SetWidgetLoweredState(WID_LGL_CARGO_FIRST + c, HasBit(cargoes, c)); - } + for (uint c = 0; c < this->num_cargo; c++) { + this->SetWidgetLoweredState(WID_LGL_CARGO_FIRST + c, HasBit(cargoes, _sorted_cargo_specs[c]->Index())); } } @@ -597,13 +599,11 @@ void LinkGraphLegendWindow::UpdateWidgetSize(int widget, Dimension *size, const } } if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { - CargoSpec *cargo = CargoSpec::Get(widget - WID_LGL_CARGO_FIRST); - if (cargo->IsValid()) { - Dimension dim = GetStringBoundingBox(cargo->abbrev, FS_SMALL); - dim.width += padding.width; - dim.height += padding.height; - *size = maxdim(*size, dim); - } + const CargoSpec *cargo = _sorted_cargo_specs[widget - WID_LGL_CARGO_FIRST]; + Dimension dim = GetStringBoundingBox(cargo->abbrev, FS_SMALL); + dim.width += padding.width; + dim.height += padding.height; + *size = maxdim(*size, dim); } } @@ -633,8 +633,7 @@ void LinkGraphLegendWindow::DrawWidget(const Rect &r, int widget) const } } if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { - if (this->IsWidgetDisabled(widget)) return; - CargoSpec *cargo = CargoSpec::Get(widget - WID_LGL_CARGO_FIRST); + const CargoSpec *cargo = _sorted_cargo_specs[widget - WID_LGL_CARGO_FIRST]; GfxFillRect(br, cargo->legend_colour); DrawString(br.left, br.right, CenterBounds(br.top, br.bottom, FONT_HEIGHT_SMALL), cargo->abbrev, GetContrastColour(cargo->legend_colour, 73), SA_HOR_CENTER, false, FS_SMALL); } @@ -655,8 +654,7 @@ bool LinkGraphLegendWindow::OnTooltip(Point pt, int widget, TooltipCloseConditio return true; } if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { - if (this->IsWidgetDisabled(widget)) return false; - CargoSpec *cargo = CargoSpec::Get(widget - WID_LGL_CARGO_FIRST); + const CargoSpec *cargo = _sorted_cargo_specs[widget - WID_LGL_CARGO_FIRST]; GuiShowTooltips(this, cargo->name, 0, nullptr, close_cond); return true; } @@ -683,10 +681,9 @@ void LinkGraphLegendWindow::UpdateOverlayCompanies() void LinkGraphLegendWindow::UpdateOverlayCargoes() { CargoTypes mask = 0; - for (uint c = 0; c < NUM_CARGO; c++) { - if (this->IsWidgetDisabled(c + WID_LGL_CARGO_FIRST)) continue; + for (uint c = 0; c < num_cargo; c++) { if (!this->IsWidgetLowered(c + WID_LGL_CARGO_FIRST)) continue; - SetBit(mask, c); + SetBit(mask, _sorted_cargo_specs[c]->Index()); } this->overlay->SetCargoMask(mask); } @@ -707,13 +704,10 @@ void LinkGraphLegendWindow::OnClick(Point pt, int widget, int click_count) this->UpdateOverlayCompanies(); this->SetDirty(); } else if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { - if (!this->IsWidgetDisabled(widget)) { - this->ToggleWidgetLoweredState(widget); - this->UpdateOverlayCargoes(); - } + this->ToggleWidgetLoweredState(widget); + this->UpdateOverlayCargoes(); } else if (widget == WID_LGL_CARGOES_ALL || widget == WID_LGL_CARGOES_NONE) { - for (uint c = 0; c < NUM_CARGO; c++) { - if (this->IsWidgetDisabled(c + WID_LGL_CARGO_FIRST)) continue; + for (uint c = 0; c < this->num_cargo; c++) { this->SetWidgetLoweredState(WID_LGL_CARGO_FIRST + c, widget == WID_LGL_CARGOES_ALL); } this->UpdateOverlayCargoes(); @@ -728,11 +722,13 @@ void LinkGraphLegendWindow::OnClick(Point pt, int widget, int click_count) */ void LinkGraphLegendWindow::OnInvalidateData(int data, bool gui_scope) { + if (this->num_cargo != _sorted_cargo_specs.size()) { + this->Close(); + return; + } + /* Disable the companies who are not active */ for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { this->SetWidgetDisabledState(i + WID_LGL_COMPANY_FIRST, !Company::IsValidID(i)); } - for (CargoID i = 0; i < NUM_CARGO; i++) { - this->SetWidgetDisabledState(i + WID_LGL_CARGO_FIRST, !CargoSpec::Get(i)->IsValid()); - } } diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index 04f45c96e4..b84527c223 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -116,6 +116,7 @@ public: private: std::shared_ptr overlay; + size_t num_cargo; void UpdateOverlayCompanies(); void UpdateOverlayCargoes(); From d086f288cd8dcc4949981a6fc99a530429e5e705 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 29 May 2023 14:29:00 +0100 Subject: [PATCH 05/18] Codechange: Remove duplicated includes. (#10888) These are now included by stdafx.h so don't need to be included again. --- src/graph_gui.cpp | 1 - src/mixer.cpp | 1 - src/music/extmidi.cpp | 1 - src/os/macosx/crashlog_osx.cpp | 1 - src/os/os2/os2.cpp | 1 - src/os/os2/os2_main.cpp | 1 - src/os/unix/crashlog_unix.cpp | 1 - src/os/unix/unix.cpp | 1 - src/os/windows/win32.cpp | 1 - src/script/api/script_industry.cpp | 1 - src/story_gui.cpp | 2 -- src/tgp.cpp | 1 - src/vehicle_gui_base.h | 2 -- src/video/opengl.cpp | 1 - 14 files changed, 16 deletions(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index b9284ef949..c145befc88 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -29,7 +29,6 @@ #include "table/strings.h" #include "table/sprites.h" -#include #include "safeguards.h" diff --git a/src/mixer.cpp b/src/mixer.cpp index b862353383..95f1c30f9d 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -8,7 +8,6 @@ /** @file mixer.cpp Mixing of sound samples. */ #include "stdafx.h" -#include #include #include #include "core/math_func.hpp" diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index cf19f17cff..69dd259d8a 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include "../safeguards.h" diff --git a/src/os/macosx/crashlog_osx.cpp b/src/os/macosx/crashlog_osx.cpp index f5149493e0..8c9c0ebcaf 100644 --- a/src/os/macosx/crashlog_osx.cpp +++ b/src/os/macosx/crashlog_osx.cpp @@ -15,7 +15,6 @@ #include "../../video/video_driver.hpp" #include "macos.h" -#include #include #include #include diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp index be62ab466a..235478ff27 100644 --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include #ifndef __INNOTEK_LIBC__ # include diff --git a/src/os/os2/os2_main.cpp b/src/os/os2/os2_main.cpp index a411a07151..9f903e3868 100644 --- a/src/os/os2/os2_main.cpp +++ b/src/os/os2/os2_main.cpp @@ -12,7 +12,6 @@ #include "../../core/random_func.hpp" #include "../../string_func.h" -#include #include #include "../../safeguards.h" diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp index dcfe273435..ed46f771e7 100644 --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -13,7 +13,6 @@ #include "../../gamelog.h" #include "../../saveload/saveload.h" -#include #include #include diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index edacf2feaf..8fa259454b 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -108,7 +108,6 @@ bool FiosIsHiddenFile(const struct dirent *ent) #ifdef WITH_ICONV #include -#include #include "../../debug.h" #include "../../string_func.h" diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 07987cb14d..affa3c9dc9 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -23,7 +23,6 @@ #include "../../fios.h" #include "../../core/alloc_func.hpp" #include "../../string_func.h" -#include #include #include "../../language.h" #include "../../thread.h" diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp index 7b76af2cda..dfb28638df 100644 --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -22,7 +22,6 @@ #include "../../industry_cmd.h" #include "../../timer/timer_game_calendar.h" #include "table/strings.h" -#include #include "../../safeguards.h" diff --git a/src/story_gui.cpp b/src/story_gui.cpp index b96ef35e4c..e804b40c40 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -31,8 +31,6 @@ #include "table/strings.h" #include "table/sprites.h" -#include - #include "safeguards.h" static CursorID TranslateStoryPageButtonCursor(StoryPageButtonCursor cursor); diff --git a/src/tgp.cpp b/src/tgp.cpp index 15a8da57ed..92255f1781 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -8,7 +8,6 @@ /** @file tgp.cpp OTTD Perlin Noise Landscape Generator, aka TerraGenesis Perlin */ #include "stdafx.h" -#include #include "clear_map.h" #include "void_map.h" #include "genworld.h" diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 86c722bfd6..8ebaae2f49 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -19,8 +19,6 @@ #include "window_gui.h" #include "widgets/dropdown_type.h" -#include - typedef GUIList GUIVehicleList; struct GUIVehicleGroup { diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index c5e82425c3..9c13361498 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -36,7 +36,6 @@ #include "../debug.h" #include "../blitter/factory.hpp" #include "../zoom_func.h" -#include #include "../table/opengl_shader.h" #include "../table/sprites.h" From e1203c3a48d28ba5189e8f43a3740dea78a1232e Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 29 May 2023 18:39:22 +0000 Subject: [PATCH 06/18] Update: Translations from eints esperanto: 51 changes by legoscia --- src/lang/esperanto.txt | 90 ++++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index b381b4c771..6bcf3c81bf 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -595,21 +595,21 @@ STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :(Mal)ŝalti la # Place in highscore window ###length 15 -STR_ORDINAL_NUMBER_1ST :1a de -STR_ORDINAL_NUMBER_2ND :2a de -STR_ORDINAL_NUMBER_3RD :3a de -STR_ORDINAL_NUMBER_4TH :4a de -STR_ORDINAL_NUMBER_5TH :5a de -STR_ORDINAL_NUMBER_6TH :6a de -STR_ORDINAL_NUMBER_7TH :7a de -STR_ORDINAL_NUMBER_8TH :8a de -STR_ORDINAL_NUMBER_9TH :9a de -STR_ORDINAL_NUMBER_10TH :10a de -STR_ORDINAL_NUMBER_11TH :11a de -STR_ORDINAL_NUMBER_12TH :12a de -STR_ORDINAL_NUMBER_13TH :13a de -STR_ORDINAL_NUMBER_14TH :14a de -STR_ORDINAL_NUMBER_15TH :15a de +STR_ORDINAL_NUMBER_1ST :1a +STR_ORDINAL_NUMBER_2ND :2a +STR_ORDINAL_NUMBER_3RD :3a +STR_ORDINAL_NUMBER_4TH :4a +STR_ORDINAL_NUMBER_5TH :5a +STR_ORDINAL_NUMBER_6TH :6a +STR_ORDINAL_NUMBER_7TH :7a +STR_ORDINAL_NUMBER_8TH :8a +STR_ORDINAL_NUMBER_9TH :9a +STR_ORDINAL_NUMBER_10TH :10a +STR_ORDINAL_NUMBER_11TH :11a +STR_ORDINAL_NUMBER_12TH :12a +STR_ORDINAL_NUMBER_13TH :13a +STR_ORDINAL_NUMBER_14TH :14a +STR_ORDINAL_NUMBER_15TH :15a ###length 31 STR_DAY_NUMBER_1ST :1a de @@ -740,9 +740,9 @@ STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Nombro d STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Nombro da staciopartoj lastatempe servitaj. Ĉiu stacioparto (ekz. stacidomo, bushaltejo, flughaveno) alkalkuliĝas, eĉ se ligite kiel unu stacio. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}La profito de la malplejenspeza veturilo (nur de veturiloj pli aĝaj ol 2 jaroj). STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Enspezo dum la plej malaltprofita kvarono de la lastaj 12 kvaronoj -STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Enspezo dum la plej altprofita kvarono de la lastaj 12 kvaronoj -STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Ŝarĝunuoj liveritaj en la lastaj 4 kvaronoj -STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Nombro da ŝarĝtipoj liveritaj en la lasta kvarono +STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Enspezo dum la plej altprofita kvaronjaro el la lastaj 12 kvaronjaroj +STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Ŝarĝunuoj liveritaj dum la pasintaj 4 kvaronjaroj +STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Nombro de ŝarĝtipoj liveritaj dum la pasinta kvaronjaro STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Monkvanto de ĉi tiu kompanio en la banko STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}La monkvanto pruntita de ĉi tiu kompanio STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Entuta poentaro el eblaj poentoj @@ -1276,6 +1276,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Kompaniaj agord STR_CONFIG_SETTINGS_NONE :{WHITE}- Neniu - ###length 3 STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Montru ĉiujn serĉrezultojn ŝanĝante{}{SILVER}Kategorion {BLACK}al {WHITE}{STRING} +STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Montru ĉiujn serĉrezultojn ŝanĝante{}{SILVER}Tipon {BLACK}al {WHITE}Ĉiuj agordoj STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Montru ĉiujn serĉrezultojn ŝanĝante{}{SILVER}Kategorion {BLACK}al {WHITE}{STRING}{BLACK}kaj {SILVER}Tipon {BLACK}al {WHITE}Ĉiuj agordoj ###length 3 @@ -1332,6 +1333,7 @@ STR_CONFIG_SETTING_RECESSIONS :Recesioj: {STRI STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, recesioj povas okazi ĉiujn kelkajn jarojn. Dum recesio ĉia produktado estas signife malpli alta (ĝi revenos al la antaŭa nivelo kiam finiĝas la recesio) STR_CONFIG_SETTING_TRAIN_REVERSING :Malpermesu al trajnoj turniĝi en stacioj: {STRING} +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Se tiu ĉi agordo estas aktiva, trajnoj ne turniĝos en trairaj stacioj, eĉ se troveblus pli mallonga vojo al la sekva celpunkto turniĝinte STR_CONFIG_SETTING_DISASTERS :Katastrofoj: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ŝaltu akcidentojn kiuj de temp' al tempo povas bloki veturilojn aŭ infrastrukturon @@ -1406,6 +1408,7 @@ STR_CONFIG_SETTING_SIGNALSIDE :Montru signaloj STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Elektu je kiu flanko de la reloj meti semaforojn ###length 3 STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Maldekstre +STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :En la strata stirflanko STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Dekstre STR_CONFIG_SETTING_SHOWFINANCES :Montru financan fenestron fine de la jaro: {STRING} @@ -1521,8 +1524,9 @@ STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Montru kiujn ŝ STR_CONFIG_SETTING_LANDSCAPE :Landaspekto: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR :Landgenerilo: {STRING} +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :La originala landgenerilo dependas je la baza grafikaro, kaj komponas fiksitajn pejzaĝformojn. TerraGenesis estas generilo bazita je Perlin-bruo kun pli fajnaj agordebloj ###length 2 -STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Originale +STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Originala STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terentipo: {STRING} @@ -1536,10 +1540,11 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limigu kiom for STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Neĝregiona alto: {STRING} STR_CONFIG_SETTING_SNOW_COVERAGE :Neĝa kovro: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Regas la proksimuman kvanton de neĝo en la arktikeca landaspekto. Neĝo ankaŭ influas generadon de fabrikoj kaj kondiĉojn por kreskado de urboj. Nur uzata dum mapgenerado. Tereno tuj super la marnivelo ĉiam estas senneĝa. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Dezerta kovro: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Regu la proksimuman kvanton de dezerto en la tropika terentipo. Dezertoj ankaŭ influas generadon de fabrikoj. Nur uzata dum mapgenerado +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Regas la proksimuman kvanton de dezerto en la tropikeca landaspekto. Dezertoj ankaŭ influas generadon de fabrikoj. Nur uzata dum mapgenerado STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Nereguleco de tereno: {STRING} @@ -1647,6 +1652,7 @@ STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Demandu STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permesu STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Imitado de dekstra klako: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Elektu metodon por imiti klakojn per la dekstra musbutono ###length 3 STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komando+Klako STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Klako @@ -1777,6 +1783,7 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Prizorginterval STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, veturiloj klopodas iri al priservado kiam ilia fidindeco estas je certa procentaĵo malpli alta ol la maksimuma fidindeco.{}{}Ekzemple, se la maksimuma fidindeco de veturilo estas 90% kaj la priservintervalo estas 20%, la veturilo klopodos iri al priservado kiam ĝi atingas fidindecon de 72%. STR_CONFIG_SETTING_SERVINT_TRAINS :Defaŭlta priservintervalo for trajnoj: {STRING} +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Elektu la defaŭltan priservintervalon por novaj relveturiloj, se ne estas eksplicite agordita priservintervalo por la veturilo STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Defaŭlta priservintervalo por stratveturiloj: {STRING} STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Elektu la defaŭltan priservintervalon por novaj stratveturiloj, se ne estas eksplicite agordita priservintervalo por la veturilo STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Defaŭlta priservintervalo por aviadiloj: {STRING} @@ -1902,6 +1909,7 @@ STR_CONFIG_SETTING_NOISE_LEVEL :Permesu urbe ko STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Kiam tiu ĉi agordo estas malaktiva, povas esti nur du flughavenoj en ĉiu urbo. Kiam tiu ĉi agordo estas aktiva, la nombron de flughavenoj en urbo limigas la bruo-toleremo de la urbo, kiu dependas de la loĝantaro kaj de la grandeco kaj distanco de la flughaveno STR_CONFIG_SETTING_TOWN_FOUNDING :Konstruanta urbojn en ludo: {STRING} +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Kiam tiu ĉi agordo estas aktiva, ludantoj rajtas fondi novajn urbojn dum la ludo ###length 3 STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :malpermesita STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :permesate @@ -1916,6 +1924,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineara STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Dumluda metado de arboj: {STRING} ###length 4 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Kresku sed ne disvastiĝu {RED}(malfunkciigas lignejojn) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Kresku sed disvastiĝu nur en pluvarbaroj STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Kresku kaj disvastiĝu ĉie STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Ne kresku, ne disvastiĝu {RED}(malfunkciigas lignejojn) @@ -1971,8 +1980,9 @@ STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Uzu {STRING}{NB STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribua reĝimo por pasaĝeroj: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetria" signifas ke proksimume la sama nombro de pasaĝeroj iros de stacio A al stacio B kiel de B al A. "Malsimetria" signifas ke ajnaj nombroj de pasaĝeroj povas iri en ajnan direkton. "Permana" signifas ke ne estos aŭtomata distribuado de pasaĝeroj. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribua reĝimo por poŝto: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetria" signifas ke proksimume la sama kvanto de poŝto estos sendita de stacio A al stacio B kiel de B al A. "Malsimetria" signifas ke ajnaj kvantoj de poŝto povas esti sendita en ajnan direkton. "Permana" signifas ke ne estos aŭtomata distribuado de poŝto. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simetria" signifas ke proksimume la sama kvanto de poŝto estos sendata de stacio A al stacio B kiel de B al A. "Malsimetria" signifas ke ajnaj kvantoj de poŝto povas esti sendataj en ajnan direkton. "Permana" signifas ke ne estos aŭtomata distribuado de poŝto. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribua reĝimo por KIRASA ŝarĝoklaso: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La KIRASA ŝarĝoklaso inkluzivas valoraĵojn en la modera landaspekto, diamantojn en la tropikeca landaspekto, aŭ oron en la arktikeca landaspekto. NewGRF-oj povas ŝanĝi tion. "Simetria" signifas ke proksimume la sama kvanto de ŝarĝo estos sendata de stacio A al stacio B kiel de B al A. "Malsimetria" signifas ke ajnaj kvantoj de ŝarĝoj povas esti sendataj en ajnan direkton. "Permana" signifas ke ne estos aŭtomata distribuado de poŝto. Estas rekomendate agordi tion ĉi al "malsimetria" aŭ "permana" en arktikeca aŭ tropikeca landaspekto, pro tio ke en tiuj landaspektoj bankoj nur ricevas ŝarĝojn. En modera landaspekto vi ankaŭ povas elekti "simetria", ĉar bankoj sendos valoraĵojn reen al la origina banko. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribua reĝimo por aliaj klasoj de ŝarĝoj: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Malsimetria" signifas ke ajnaj kvantoj de ŝarĝoj povas esti senditaj en ajnan direkton. "Permana" signifas ke ne estos aŭtomata distribuado de tiaj ĉi ŝarĝoj. ###length 3 @@ -2381,6 +2391,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nomo STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Via ludantnomo STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Ŝanĝu vian ludantonomon STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Via ludantnomo +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administraj agoj fareblaj por tiu ĉi kompanio STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Aliĝu al tiu ĉi kompanio STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Sendu mesaĝon al tiu ĉi ludanto STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Sendu mesaĝon al ĉiuj ludantoj de tiu ĉi kompanio @@ -2468,6 +2479,7 @@ STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Kialo: { STR_NETWORK_ERROR_CHEATER :{WHITE}Vi ne rajtas filudi en ĉi tiu servilo STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Vi estis sendanta tro da komandojn al la servilo STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Via komputilo bezonis tro longan tempon por elŝuti la mapon +STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Via komputilo bezonis tro longan tempon por aliĝi al la servilo STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Via ludantnomo estas malvalida STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Ebla konektoperdo @@ -3218,7 +3230,7 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Altigu l STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Ŝanĝu altecon de ebena lando # Map generation progress -STR_GENERATION_WORLD :{WHITE}Generante Mondon... +STR_GENERATION_WORLD :{WHITE}Generas mondon... STR_GENERATION_ABORT :{BLACK}Ĉesu STR_GENERATION_ABORT_CAPTION :{WHITE}Ĉesu generi mondon STR_GENERATION_ABORT_MESSAGE :{YELLOW}Ĉu vi vere volas ĉesi generi mondon? @@ -4296,27 +4308,27 @@ STR_ORDER_DROP_TRANSFER :Transigo STR_ORDER_DROP_NO_UNLOADING :Ne malŝarĝu STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Ŝanĝi la malŝarĝagon de la emfazita ordono -STR_ORDER_REFIT :{BLACK}Transformu -STR_ORDER_REFIT_TOOLTIP :{BLACK}Elektu kargospecon por transformo en ĉi tiu ordono. CTRL+klako por forigi transforminstrukcion -STR_ORDER_REFIT_AUTO :{BLACK}Aŭtotransformi al stacio +STR_ORDER_REFIT :{BLACK}Readaptu +STR_ORDER_REFIT_TOOLTIP :{BLACK}Elektu al kia ŝarĝotipo readapti en ĉi tiu ordono. Ctrl+klaku por forigi readaptan instrukcion +STR_ORDER_REFIT_AUTO :{BLACK}Readaptu ĉe stacio STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elektu al kia ŝarĝotipo readapti en tiu ĉi ordono. Forigu la readaptan instrukcion per Stir+klako. Readaptado ĉe stacioj okazos nur se la veturilo permesas tion STR_ORDER_DROP_REFIT_AUTO :Malŝanĝa ŝarĝo STR_ORDER_DROP_REFIT_AUTO_ANY :Haveblaj ŝarĝoj -STR_ORDER_SERVICE :{BLACK}Prizorgo +STR_ORDER_SERVICE :{BLACK}Priservo STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ĉiam iru. STR_ORDER_DROP_SERVICE_DEPOT :Prizorgu se necesas. STR_ORDER_DROP_HALT_DEPOT :Haltu. -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Transsalti ordonon escepte de prizorgo necesas +STR_ORDER_SERVICE_TOOLTIP :{BLACK}Transsaltu tiun ĉi ordonon krom se priservo necesas # Conditional order variables, must follow order of OrderConditionVariable enum ###length 8 -STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Ŝarĝu procenton -STR_ORDER_CONDITIONAL_RELIABILITY :Fidindo -STR_ORDER_CONDITIONAL_MAX_SPEED :Maksimuma rapido. +STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Ŝarĝoprocentaĵo +STR_ORDER_CONDITIONAL_RELIABILITY :Fidindeco +STR_ORDER_CONDITIONAL_MAX_SPEED :Maksimuma rapideco STR_ORDER_CONDITIONAL_AGE :Aĝo (jaroj) -STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Prizorgo necesas. +STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Priservado necesas STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Ĉiam STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Resta vivo (jaroj) STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimuma fidindeco @@ -4343,8 +4355,8 @@ STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Haltu ku STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Haltu kunhavanta la ordonan registron. Stir+Klak ankaŭ forviŝas ĉiujn ordonojn por ĉi tio veturilo STR_ORDERS_GO_TO_BUTTON :{BLACK}Iru al -STR_ORDER_GO_TO_NEAREST_DEPOT :Iru al la plej proksima garaĝo. -STR_ORDER_GO_TO_NEAREST_HANGAR :Iru al la plej proksima hangaro. +STR_ORDER_GO_TO_NEAREST_DEPOT :Iru al la plej proksima garaĝo +STR_ORDER_GO_TO_NEAREST_HANGAR :Iru al la plej proksima hangaro STR_ORDER_CONDITIONAL :Kondiĉe transsaltu ordonon STR_ORDER_SHARE :Kunhavu ordonojn STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Enigi novan ordonon antaŭ la elektita ordono, aŭ aldoni fine de la listo. Kun Ctrl, trajnordonoj estos 'plenŝargi ia kargo', vojpunkt-ordonoj estos 'ne-halti' kaj depotordono estos 'servado'. Kun 'Komunordonoj'-butono aŭ Ctrl-klaku, ĉi tiu veturilo akiros komunajn ordonojn kun eklekta veturilo. Klaku veturilon por kopii ordonojn de tiu veturilo. Doni ia depotordono maleblas aŭtomatan servadon de ĉi tiu veturilo @@ -4355,8 +4367,8 @@ STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Montru STR_ORDER_GO_TO_WAYPOINT :Iru laŭ {WAYPOINT} STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Iru senhalte laŭ {WAYPOINT} -STR_ORDER_SERVICE_AT :Prizorgu ĉe -STR_ORDER_SERVICE_NON_STOP_AT :Prizorgu senhalte ĉe +STR_ORDER_SERVICE_AT :Priservo ĉe +STR_ORDER_SERVICE_NON_STOP_AT :Priservo senhalte ĉe STR_ORDER_NEAREST_DEPOT :la plej proksima STR_ORDER_NEAREST_HANGAR :la plej proksima Hangaro @@ -4369,8 +4381,8 @@ STR_ORDER_SHIP_DEPOT :Ŝipgaraĝo STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} -STR_ORDER_REFIT_ORDER :(Transformu al {STRING}) -STR_ORDER_REFIT_STOP_ORDER :(Transformu al {STRING} kaj haltu) +STR_ORDER_REFIT_ORDER :(Readaptu por porti {STRING.n}) +STR_ORDER_REFIT_STOP_ORDER :(Readaptu por porti {STRING.n} kaj haltu) STR_ORDER_STOP_ORDER :(Haltu) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} @@ -4405,7 +4417,7 @@ STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Transigi kaj a STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Transigi kaj atendi por ian plenan ŝarĝon kun aŭtotransformi al {STRING}) STR_ORDER_NO_UNLOAD_REFIT :(Ne malŝarĝi kaj preni ŝarĝojn kun aŭtotransformi al {STRING}) STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Ne malŝarĝi kaj atendi por la plenan ŝarĝon kun aŭtotransformi al {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Ne malŝarĝi kaj atendi por ian plenan ŝarĝon kun aŭtotransformi al {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Ne malŝarĝu kaj atendu plenan ŝarĝon de ajna ŝarĝotipo, kun readapto por porti {STRING.n}) STR_ORDER_AUTO_REFIT_ANY :haveblaj ŝarĝoj @@ -4711,7 +4723,7 @@ STR_ERROR_TOO_MANY_TOWNS :{WHITE}... tro STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... spaco mankas sur la mapo STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}La urbo ne konstruos stratojn. Vi povas ebligi stratkonstruadon per Avancitaj Agordoj->Ekonomio->Urboj STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Aktivas vojprilaborado -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Ne povas forviŝi ĉi tiun urbon...{}Stacidomo aŭ tenejo rilatas al la urbon aŭ urban kahelon ne povas forviŝigi +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Ne eblas forviŝi ĉi tiun urbon...{}Stacidomo aŭ garaĝo havas referencon al la urbo, aŭ ne eblas forviŝi kahelon posedatan de la urbo STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... ne jen estas konvenan lokon por statuo en la centro de ĉi tiu urbo # Industry related errors From c8b70e4877e4ad285609a388274a846fde407809 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 30 May 2023 18:40:56 +0000 Subject: [PATCH 07/18] Update: Translations from eints ukrainian: 53 changes by alextov portuguese (brazilian): 1 change by ericandradex --- src/lang/brazilian_portuguese.txt | 2 +- src/lang/ukrainian.txt | 76 +++++++++++++++++++++---------- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 163febbcda..99707987d3 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1033,7 +1033,7 @@ STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detectar tamanho automaticamente STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detectar o tamanho da interface automaticamente -STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar de chanfros +STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar chanfros STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar os chanfros por tamanho de interface STR_GAME_OPTIONS_GUI_SCALE_1X :1x diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 21f7ebd049..a1b95d8ead 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -399,7 +399,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}нати # Query window STR_BUTTON_DEFAULT :{BLACK}Стандартно -STR_BUTTON_CANCEL :{BLACK}Відміна +STR_BUTTON_CANCEL :{BLACK}Скасувати STR_BUTTON_OK :{BLACK}Так STR_WARNING_PASSWORD_SECURITY :{YELLOW}Попередження: Адміністратори серверів можуть мати можливість читати будь-який текст, введений тут. @@ -951,11 +951,11 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Жителі святкують . . .{}Перший корабель з'явився на {STATION}! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Жителі святкують . . .{}Перший літак з'явився на {STATION}! -STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Аварія!{}Поїзди зіткнулися.{}{COMMA} загинуло. +STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Аварія!{}{COMMA} люд{P ина ини ей} загинул{P а и о} при зіткненні поїздів STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Аварія!{}Водій загинув при зіткненні авто з поїздом -STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Аварія!{}{COMMA} загинуло при зіткненні авто з поїздом +STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Аварія!{}{COMMA} люд{P ина ини ей} загинул{P а и о} при зіткненні авто з поїздом STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}{}{COMMA} загиблих в авіакатастрофі! Літак розбився біля {STATION} -STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Авіакатастрофа!{}В літака закінчилось пальне, {COMMA} людей загинуло! +STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Авіакатастрофа!{}В літака закінчилось пальне, {COMMA} люд{P ина ини ей} загинул{P а и о}! STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Дирижабль впав на {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Автомобіль знищений внаслідок зіткнення з НЛО! @@ -1030,19 +1030,19 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Відт STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Відкрити вікно групи з центром на групах транспорту -STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} більше не приймає {STRING} -STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} більше не приймає {STRING} або {STRING} -STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} тепер приймає {STRING} -STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} тепер приймає {STRING} і {STRING} +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} більше не приймає {STRING.z} +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} більше не приймає {STRING.z} або {STRING.z} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} тепер приймає {STRING.z} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} тепер приймає {STRING.z} і {STRING.z} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Субсидія більше не пропонується:{}{}Перевезення {STRING.r} з {STRING} до {STRING} STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Субсидію скасовано:{}{}Перевезення {STRING.r} з {STRING.r} до {STRING.r} -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Пропонується субсидія:{}{}компанії, яка першою привезе вантаж {STRING} з {STRING} до {STRING} платитимуть субсидію впродовж {NUM} рок{P у ів ів}! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Пропонується субсидія:{}{}компанії, яка першою привезе {STRING.z} з {STRING} до {STRING} платитимуть субсидію впродовж {NUM} рок{P у ів ів}! ###length 4 -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Субсидію надано компанії {STRING}!{}{}Перевезення вантажу {STRING} з {STRING} до {STRING} принесе додатково 50% впродовж {NUM} рок{P у ів ів}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Субсидію надано {STRING}!{}{}Перевезення вантажу {STRING} з {STRING} до {STRING} принесе вдвічі більше прибутків впродовж {NUM} рок{P у ів ів}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Субсидію надано {STRING}!{}{}Перевезення вантажу {STRING} з {STRING} до {STRING} принесе втричі більше прибутків впродовж {NUM} рок{P у ів ів}! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Субсидію надано {STRING}!{}{}Перевезення вантажу {STRING} з {STRING} до {STRING} принесе вчетверо більше прибутків впродовж {NUM} рок{P у ів ів}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Субсидію надано компанії {STRING}!{}{}Перевезення {STRING.r} з {STRING} до {STRING} принесе додатково 50% впродовж {NUM} рок{P у ів ів}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Субсидію надано {STRING}!{}{}Перевезення {STRING.r} з {STRING} до {STRING} принесе вдвічі більше прибутків впродовж {NUM} рок{P у ів ів}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Субсидію надано {STRING}!{}{}Перевезення {STRING.r} з {STRING} до {STRING} принесе втричі більше прибутків впродовж {NUM} рок{P у ів ів}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Субсидію надано {STRING}!{}{}Перевезення {STRING.r} з {STRING} до {STRING} принесе вчетверо більше прибутків впродовж {NUM} рок{P у ів ів}! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Транспортний безлад у місті {TOWN}!{}{}Реконструкція доріг, фінансована компанією {STRING} принесе транспорту незручності протягом 6 місяців! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Транспортна монополія! @@ -1058,8 +1058,17 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Пере # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Налаштування гри +STR_GAME_OPTIONS_TAB_GENERAL :Загальні +STR_GAME_OPTIONS_TAB_GRAPHICS :Графіка +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Виберіть налаштування графіки +STR_GAME_OPTIONS_TAB_SOUND :Звук +STR_GAME_OPTIONS_VOLUME :Гучність +STR_GAME_OPTIONS_SFX_VOLUME :Звукові ефекти +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Грошова одиниця STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Виберіть грошову одиницю @@ -1150,6 +1159,7 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3x STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_5X :5x +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка @@ -1280,6 +1290,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Розг STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Згорнути всі STR_CONFIG_SETTING_RESET_ALL :{BLACK}Скинути усі значення STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(пояснення відсутнє) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Стандартне значення: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Тип: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Налаштування клієнта (не присутні в збережених іграх; впливають на будь-яку гру) @@ -1335,6 +1346,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :правору STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальна сума позики: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальна сума позики для компанії (без урахування інфляції) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Процентна ставка: {STRING} @@ -1651,7 +1663,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :фіолето STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Схема кольорів вантажопотоків: {STRING} STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Встановіть схему кольорів для показу вантажних потоків. ###length 4 -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Віж зеленого до червоного (оригінальна) +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Від зеленого до червоного (оригінальна) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Від зеленого до синього STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Від сірого до червоного STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Відтінки сірого @@ -2043,6 +2055,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Жодного STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множник розміру мегаполісів: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Середньостатистичне відношення початкового розміру мегаполісів порівняно зі звичайними містами. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Час між перерозрахунками графа зв'язків. Кожен розрахунок обчислює однин компонент графа, тобто лише деякі компоненти оновляться після закінчення кожного проміжку часу, а не весь граф. Чим менше це значення, тим більше часу процесора буде витрачатися. Чим більше це значення, тим довше буде очікувати розподілення вантажів на нових маршрутах STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим розподілу для пасажирів: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :В "симетричному" режимі від станції A до станції B відправлятиметься приблизно стільки ж пасажирів, як від B до A. В "асиметричному" режимі дозволяється відправляти довільну кількість пасажирів в обох напрямках. Ручний режим означає, що розподіл пасажирів не здійснюватиметься автоматично. @@ -2282,7 +2295,7 @@ STR_LIVERY_FREIGHT_TRAM :Вантажн # Face selection window STR_FACE_CAPTION :{WHITE}Вибір обличчя -STR_FACE_CANCEL_TOOLTIP :{BLACK}Відмінити вибір нового обличчя +STR_FACE_CANCEL_TOOLTIP :{BLACK}Скасувати вибір нового обличчя STR_FACE_OK_TOOLTIP :{BLACK}Підтвердити вибір нового обличчя STR_FACE_RANDOM :{BLACK}Випадково @@ -2475,6 +2488,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Нова ко STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Створити нову компанію і приєднатись до неї STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Це ти STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Організатор гри +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} клієнт{P "" и ів} - {NUM}/{NUM} компан{P ія ії ій} # Matches ConnectionType ###length 5 @@ -2501,6 +2515,9 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Ні STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Так, тільки раз STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Так, більше не питати +STR_NETWORK_ASK_SURVEY_CAPTION :Дозволити автоматизований збір даних? +STR_NETWORK_ASK_SURVEY_NO :Ні +STR_NETWORK_ASK_SURVEY_YES :Так STR_NETWORK_SPECTATORS :Спостерігачі @@ -2821,6 +2838,9 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Збіл STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Виберіть міст STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Виберіть дорожній міст STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Вибір мосту - натисніть на міст, який бажаєте збудувати +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Підвісний сталевий STR_BRIDGE_NAME_GIRDER_STEEL :Балочний сталевий STR_BRIDGE_NAME_CANTILEVER_STEEL :Каркасний сталевий @@ -2953,7 +2973,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Садж # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Створити ландшафт STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Розміщення кам'яних ділянок -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Позначити територію пустелі.{}Натисніть і утримуйте CTRL, щоб відмінити +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Позначити територію пустелі.{}Натисніть і утримуйте CTRL, щоб скасувати STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Збільшити область ділянки для підняття/опускання STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Зменшити область ділянки для підняття/опускання STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Створити випадкову ділянку @@ -3468,6 +3488,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Попередження: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Помилка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Збій: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Фатальна помилка NewGRF '{STRING}':{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}Помилка NewGRF '{STRING}':{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} не буде працювати з версією TTDPatch, вказаною OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} для {2:STRING}-версії TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} розроблено для використання з {2:STRING} @@ -3640,7 +3662,7 @@ STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Пом # Goal Question button list ###length 18 -STR_GOAL_QUESTION_BUTTON_CANCEL :Відмінити +STR_GOAL_QUESTION_BUTTON_CANCEL :Скасувати STR_GOAL_QUESTION_BUTTON_OK :Гаразд STR_GOAL_QUESTION_BUTTON_NO :Ні STR_GOAL_QUESTION_BUTTON_YES :Так @@ -3925,6 +3947,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Дати STR_VEHICLE_LIST_REPLACE_VEHICLES :Оновлення STR_VEHICLE_LIST_SEND_FOR_SERVICING :Відправити на техогляд STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Прибуток цього року: {CURRENCY_LONG} (торік: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Відправити до депо STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Відправити в гараж @@ -4007,7 +4031,7 @@ STR_PURCHASE_INFO_COST_SPEED :{BLACK}Ціна STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Ціна: {GOLD}{CURRENCY_LONG}{BLACK} (Вартість переобладнання: {GOLD}{CURRENCY_LONG}{BLACK}) Швидкість: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Місткість: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Потужність: {GOLD}+{POWER}{BLACK} Вага: {GOLD}+{WEIGHT_SHORT} -STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Може бути переобладненим на: {GOLD}{STRING} +STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Може бути переобладнаним на: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Всі типи вантажів STR_PURCHASE_INFO_NONE :Нема STR_PURCHASE_INFO_ENGINES_ONLY :Тільки локомотиви @@ -4505,7 +4529,7 @@ STR_ORDERS_SKIP_TOOLTIP :{BLACK}Проп STR_ORDERS_DELETE_BUTTON :{BLACK}Видалити STR_ORDERS_DELETE_TOOLTIP :{BLACK}Видалити виділене завдання STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Видалити всі накази -STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Відмінити спільні накази +STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Скасувати спільні накази STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Перестати використовути спільні накази. Ctrl+клац мишою видаляє всі накази для цього транспорту STR_ORDERS_GO_TO_BUTTON :{BLACK}Прямувати @@ -4560,7 +4584,7 @@ STR_ORDER_NO_UNLOAD_FULL_LOAD :(Не розв STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Не розвантажуватись і чекати повного завантаження будь-якого виду) STR_ORDER_NO_UNLOAD_NO_LOAD :(Не розвантажуватись і не завантажуватись) -STR_ORDER_AUTO_REFIT :(Переобладнати в {STRING}) +STR_ORDER_AUTO_REFIT :(Переобладнати в {STRING.z}) STR_ORDER_FULL_LOAD_REFIT :(Завантажити все з переобладнанням в {STRING}) STR_ORDER_FULL_LOAD_ANY_REFIT :(Повністю завантажити будь-який вид вантажу з переобладнанням в {STRING}) STR_ORDER_UNLOAD_REFIT :(Розвантажити і взяти вантаж з переобладнанням в {STRING}) @@ -4689,7 +4713,9 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}АІ, я STR_AI_CONFIG_HUMAN_PLAYER :Гравець-людина STR_AI_CONFIG_RANDOM_AI :Випадковий AI STR_AI_CONFIG_NONE :(нема) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Кількість конкурентів: {ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Проміжок між вступом конкурентів у гру: {ORANGE}{COMMA} хвилин{P а и ""} STR_AI_CONFIG_MOVE_UP :{BLACK}Перемістити вище STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Перемістити обраний AI вверх по списку @@ -4702,7 +4728,7 @@ STR_AI_CONFIG_AI :{SILVER}АІ STR_AI_CONFIG_CHANGE_AI :{BLACK}Обрати ШІ STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Обрати ігровий скрипт -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Завантажити інший скрипт +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Завантажити інший скрипт. Ctrl+Click показує всі наявні версії STR_AI_CONFIG_CONFIGURE :{BLACK}Настроїти STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Настроїти параметри скрипту @@ -4718,7 +4744,7 @@ STR_AI_LIST_URL :{LTBLUE}URL: {O STR_AI_LIST_ACCEPT :{BLACK}Прийняти STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Вибрати виділений скрипт -STR_AI_LIST_CANCEL :{BLACK}Відміна +STR_AI_LIST_CANCEL :{BLACK}Скасувати STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не міняти скрипт STR_SCREENSHOT_CAPTION :{WHITE}Зробити знімок екрану @@ -5181,12 +5207,14 @@ STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... не STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :WHITE}... не увесь транспорт має спільні завдання STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Неможливо розділити список завдань... -STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Неможливо відмінити спільні накази... +STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Неможливо скасувати спільні накази... STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Неможливо скопіювати список завдань... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... занадто далеко від попереднього пункту призначення STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... літак не може летіти так далеко # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_TRUCK_STATION :{WHITE}Немає вантажної станції +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Цей гелікоптер не може приземлятися у цьому аеропорту # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не можна встановити розклад для транспорту... @@ -5708,11 +5736,13 @@ STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} STR_JUST_CARGO :{CARGO_LONG} +STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT} STR_JUST_CURRENCY_LONG :{CURRENCY_LONG} STR_JUST_CARGO_LIST :{CARGO_LIST} +STR_JUST_DECIMAL :{DECIMAL} STR_JUST_INT :{NUM} STR_JUST_DATE_TINY :{DATE_TINY} STR_JUST_DATE_SHORT :{DATE_SHORT} From 0302e6f16802cc324d313f3b678a0fe526f9482b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 30 May 2023 21:17:30 +0200 Subject: [PATCH 08/18] Codechange: initialize all values of ICURun on construction (#10892) --- src/gfx_layout_icu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index 730df125bd..1311030a64 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -46,7 +46,7 @@ public: std::vector advance; ///< The advance (width) of the glyphs. Valid after Shape() is called. std::vector glyph_to_char; ///< The mapping from glyphs to characters. Valid after Shape() is called. std::vector positions; ///< The positions of the glyphs. Valid after Shape() is called. - int total_advance; ///< The total advance of the run. Valid after Shape() is called. + int total_advance = 0; ///< The total advance of the run. Valid after Shape() is called. ICURun(int start, int length, UBiDiLevel level, UScriptCode script = USCRIPT_UNKNOWN, Font *font = nullptr) : start(start), length(length), level(level), script(script), font(font) {} From 1ff0dc11d8d017dbbd8f9d1e94ff5087a21063b5 Mon Sep 17 00:00:00 2001 From: PeterN Date: Wed, 31 May 2023 09:54:39 +0100 Subject: [PATCH 09/18] Fix: Land info window maximum width was not scaled. (#10894) --- src/misc_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index cecb68642f..802d67edd3 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -102,7 +102,7 @@ public: if (!this->cargo_acceptance.empty()) { uint width = GetStringBoundingBox(this->cargo_acceptance).width + WidgetDimensions::scaled.frametext.Horizontal(); - size->width = std::max(size->width, std::min(300u, width)); + size->width = std::max(size->width, std::min(static_cast(ScaleGUITrad(300)), width)); SetDParamStr(0, cargo_acceptance); size->height += GetStringHeight(STR_JUST_RAW_STRING, size->width - WidgetDimensions::scaled.frametext.Horizontal()); } From b8bb0d820a5415ac3eef3252b67ffff38217bce4 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 3 Jul 2023 21:16:20 +0100 Subject: [PATCH 10/18] Add missing includes to newgrf_config.h See: #563 --- src/newgrf_config.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/newgrf_config.h b/src/newgrf_config.h index ef0c1e6a4c..69ddfccf83 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -18,6 +18,8 @@ #include "newgrf_text.h" #include "3rdparty/md5/md5.h" #include +#include +#include static const uint MAX_NON_STATIC_GRF_COUNT = 256; From 5ae5ac37014655937949cb38dd57af0984d1ea25 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 3 Jul 2023 21:20:27 +0100 Subject: [PATCH 11/18] Add missing includes to cargo_type.h --- src/cargo_type.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cargo_type.h b/src/cargo_type.h index 808ac13339..48af1a7ed9 100644 --- a/src/cargo_type.h +++ b/src/cargo_type.h @@ -12,6 +12,9 @@ #include "core/enum_type.hpp" +#include +#include + /** * Cargo slots to indicate a cargo type within a game. * Numbers are re-used between different climates. From 0bf41dc1ffcd9ac70c4283171d9de5be3d6a72c1 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 3 Jul 2023 22:42:28 +0100 Subject: [PATCH 12/18] Change gamelog to use std::vector Move LoadCheckData to its own header --- src/CMakeLists.txt | 1 + src/fios.h | 67 -------------------- src/fios_gui.cpp | 7 +-- src/gamelog.cpp | 116 ++++++++++++++--------------------- src/gamelog.h | 8 ++- src/gamelog_internal.h | 8 +-- src/load_check.h | 89 +++++++++++++++++++++++++++ src/openttd.cpp | 3 +- src/saveload/afterload.cpp | 9 ++- src/saveload/company_sl.cpp | 1 + src/saveload/gamelog_sl.cpp | 55 ++++++++--------- src/saveload/map_sl.cpp | 1 + src/saveload/misc_sl.cpp | 1 + src/saveload/newgrf_sl.cpp | 1 + src/saveload/settings_sl.cpp | 1 + src/settings.cpp | 1 + src/sl/company_sl.cpp | 1 + src/sl/debug_sl.cpp | 1 + src/sl/gamelog_sl.cpp | 65 +++++++------------- src/sl/map_sl.cpp | 1 + src/sl/misc_sl.cpp | 1 + src/sl/newgrf_sl.cpp | 1 + src/sl/saveload.cpp | 1 + 23 files changed, 212 insertions(+), 228 deletions(-) create mode 100644 src/load_check.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 720664aa68..891b9b7568 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -238,6 +238,7 @@ add_files( league_gui.cpp league_type.h livery.h + load_check.h main_gui.cpp map.cpp map_func.h diff --git a/src/fios.h b/src/fios.h index 2742549b71..ca8fb0c0a6 100644 --- a/src/fios.h +++ b/src/fios.h @@ -23,73 +23,6 @@ enum SaveLoadInvalidateWindowData { SLIWD_FILTER_CHANGES, ///< The filename filter has changed (via the editbox) }; -using CompanyPropertiesMap = std::map>; - -/** - * Container for loading in mode SL_LOAD_CHECK. - */ -struct LoadCheckData { - bool checkable; ///< True if the savegame could be checked by SL_LOAD_CHECK. (Old savegames are not checkable.) - StringID error; ///< Error message from loading. INVALID_STRING_ID if no error. - std::string error_msg; ///< Data to pass to SetDParamStr when displaying #error. - - uint32 map_size_x, map_size_y; - Date current_date; - - GameSettings settings; - - CompanyPropertiesMap companies; ///< Company information. - - GRFConfig *grfconfig; ///< NewGrf configuration from save. - bool want_grf_compatibility = true; - GRFListCompatibility grf_compatibility; ///< Summary state of NewGrfs, whether missing files or only compatible found. - - struct LoggedAction *gamelog_action; ///< Gamelog actions - uint gamelog_actions; ///< Number of gamelog actions - - bool want_debug_data = false; - std::string debug_log_data; - std::string debug_config_data; - - bool sl_is_ext_version = false; - - LoadCheckData() : grfconfig(nullptr), - grf_compatibility(GLC_NOT_FOUND), gamelog_action(nullptr), gamelog_actions(0) - { - this->Clear(); - } - - /** - * Don't leak memory at program exit - */ - ~LoadCheckData() - { - this->Clear(); - } - - /** - * Check whether loading the game resulted in errors. - * @return true if errors were encountered. - */ - bool HasErrors() - { - return this->checkable && this->error != INVALID_STRING_ID; - } - - /** - * Check whether the game uses any NewGrfs. - * @return true if NewGrfs are used. - */ - bool HasNewGrfs() - { - return this->checkable && this->error == INVALID_STRING_ID && this->grfconfig != nullptr; - } - - void Clear(); -}; - -extern LoadCheckData _load_check_data; - /** Deals with finding savegames */ struct FiosItem { FiosType type; diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index b87197993d..5504bba5c5 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -8,6 +8,7 @@ /** @file fios_gui.cpp GUIs for loading/saving games, scenarios, heightmaps, ... */ #include "stdafx.h" +#include "load_check.h" #include "sl/saveload.h" #include "error.h" #include "gui.h" @@ -57,9 +58,7 @@ void LoadCheckData::Clear() companies.clear(); - GamelogFree(this->gamelog_action, this->gamelog_actions); - this->gamelog_action = nullptr; - this->gamelog_actions = 0; + GamelogFree(this->gamelog_actions); ClearGRFConfigList(&this->grfconfig); @@ -790,7 +789,7 @@ public: ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE_DIFFERENT_ID, STR_SAVELOAD_OVERWRITE_WARNING_DIFFERENT_ID, this, SaveLoadWindow::SaveGameConfirmationCallback); } else if (_settings_client.gui.savegame_overwrite_confirm >= (known_id ? 3 : 2) && file_exists) { if (this->selected != nullptr && !_load_check_data.sl_is_ext_version) { - const char *version = GamelogGetLastRevision(_load_check_data.gamelog_action, _load_check_data.gamelog_actions); + const char *version = GamelogGetLastRevision(_load_check_data.gamelog_actions); SetDParam(0, STR_SAVELOAD_OVERWRITE_TITLE); std::string caption = GetString(STR_SAVELOAD_OVERWRITE_TITLE_DIFFERENT_VERSION_SUFFIX); diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 59cf1466be..e22c4cf329 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -33,8 +33,7 @@ extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! static GamelogActionType _gamelog_action_type = GLAT_NONE; ///< action to record if anything changes -LoggedAction *_gamelog_action = nullptr; ///< first logged action -uint _gamelog_actions = 0; ///< number of actions +std::vector _gamelog_actions; ///< logged actions static LoggedAction *_current_action = nullptr; ///< current action we are logging, nullptr when there is no action active @@ -72,19 +71,17 @@ void GamelogStopAnyAction() /** * Frees the memory allocated by a gamelog */ -void GamelogFree(LoggedAction *gamelog_action, uint gamelog_actions) +void GamelogFree(std::vector &gamelog_actions) { - for (uint i = 0; i < gamelog_actions; i++) { - const LoggedAction *la = &gamelog_action[i]; - for (uint j = 0; j < la->changes; j++) { - const LoggedChange *lc = &la->change[j]; - if (lc->ct == GLCT_SETTING) free(lc->setting.name); - if (lc->ct == GLCT_REVISION) free(lc->revision.text); + for (LoggedAction &la : gamelog_actions) { + for (LoggedChange &lc : la.changes) { + if (lc.ct == GLCT_SETTING) free(lc.setting.name); + if (lc.ct == GLCT_REVISION) free(lc.revision.text); + lc.ct = GLCT_NONE; } - free(la->change); } - free(gamelog_action); + gamelog_actions.clear(); } /** @@ -93,10 +90,7 @@ void GamelogFree(LoggedAction *gamelog_action, uint gamelog_actions) void GamelogReset() { assert(_gamelog_action_type == GLAT_NONE); - GamelogFree(_gamelog_action, _gamelog_actions); - - _gamelog_action = nullptr; - _gamelog_actions = 0; + GamelogFree(_gamelog_actions); _current_action = nullptr; } @@ -174,17 +168,14 @@ void GamelogPrint(GamelogPrintProc *proc) proc("---- gamelog start ----"); - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; + for (const LoggedAction &la : _gamelog_actions) { + assert((uint)la.at < GLAT_END); - for (const LoggedAction *la = _gamelog_action; la != laend; la++) { - assert((uint)la->at < GLAT_END); - - seprintf(buffer, lastof(buffer), "Tick %u: %s", (uint)la->tick, la_text[(uint)la->at]); + seprintf(buffer, lastof(buffer), "Tick %u: %s", (uint)la.tick, la_text[(uint)la.at]); proc(buffer); - const LoggedChange *lcend = &la->change[la->changes]; - - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { + for (const LoggedChange &lchange : la.changes) { + const LoggedChange *lc = &lchange; char *buf = buffer; switch (lc->ct) { @@ -259,12 +250,12 @@ void GamelogPrint(GamelogPrintProc *proc) case GLCT_GRFREM: { /* A NewGRF got removed from the game, either manually or by it missing when loading the game. */ auto gm = grf_names.find(lc->grfrem.grfid); - buf += seprintf(buf, lastof(buffer), la->at == GLAT_LOAD ? "Missing NewGRF: " : "Removed NewGRF: "); + buf += seprintf(buf, lastof(buffer), la.at == GLAT_LOAD ? "Missing NewGRF: " : "Removed NewGRF: "); buf = PrintGrfInfo(buf, lastof(buffer), lc->grfrem.grfid, nullptr, gm != grf_names.end() ? gm->second.gc : nullptr); if (gm == grf_names.end()) { buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!"); } else { - if (la->at == GLAT_LOAD) { + if (la.at == GLAT_LOAD) { /* Missing grfs on load are not removed from the configuration */ gm->second.was_missing = true; } else { @@ -371,18 +362,14 @@ static LoggedChange *GamelogChange(GamelogChangeType ct) if (_current_action == nullptr) { if (_gamelog_action_type == GLAT_NONE) return nullptr; - _gamelog_action = ReallocT(_gamelog_action, _gamelog_actions + 1); - _current_action = &_gamelog_action[_gamelog_actions++]; + _current_action = &_gamelog_actions.emplace_back(); _current_action->at = _gamelog_action_type; _current_action->tick = _tick_counter; - _current_action->change = nullptr; - _current_action->changes = 0; } - _current_action->change = ReallocT(_current_action->change, _current_action->changes + 1); - - LoggedChange *lc = &_current_action->change[_current_action->changes++]; + _current_action->changes.push_back({}); + LoggedChange *lc = &_current_action->changes.back(); lc->ct = ct; return lc; @@ -406,17 +393,13 @@ void GamelogEmergency() */ bool GamelogTestEmergency() { - const LoggedChange *emergency = nullptr; - - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; - for (const LoggedAction *la = _gamelog_action; la != laend; la++) { - const LoggedChange *lcend = &la->change[la->changes]; - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { - if (lc->ct == GLCT_EMERGENCY) emergency = lc; + for (LoggedAction &la : _gamelog_actions) { + for (LoggedChange &lc : la.changes) { + if (lc.ct == GLCT_EMERGENCY) return true; } } - return (emergency != nullptr); + return false; } /** @@ -490,11 +473,9 @@ void GamelogTestRevision() { const LoggedChange *rev = nullptr; - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; - for (const LoggedAction *la = _gamelog_action; la != laend; la++) { - const LoggedChange *lcend = &la->change[la->changes]; - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { - if (lc->ct == GLCT_REVISION) rev = lc; + for (LoggedAction &la : _gamelog_actions) { + for (LoggedChange &lc : la.changes) { + if (lc.ct == GLCT_REVISION) rev = &lc; } } @@ -513,11 +494,9 @@ void GamelogTestMode() { const LoggedChange *mode = nullptr; - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; - for (const LoggedAction *la = _gamelog_action; la != laend; la++) { - const LoggedChange *lcend = &la->change[la->changes]; - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { - if (lc->ct == GLCT_MODE) mode = lc; + for (LoggedAction &la : _gamelog_actions) { + for (LoggedChange &lc : la.changes) { + if (lc.ct == GLCT_MODE) mode = &lc; } } @@ -554,12 +533,10 @@ static void GamelogGRFBug(uint32 grfid, byte bug, uint64 data) */ bool GamelogGRFBugReverse(uint32 grfid, uint16 internal_id) { - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; - for (const LoggedAction *la = _gamelog_action; la != laend; la++) { - const LoggedChange *lcend = &la->change[la->changes]; - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { - if (lc->ct == GLCT_GRFBUG && lc->grfbug.grfid == grfid && - lc->grfbug.bug == GBUG_VEH_LENGTH && lc->grfbug.data == internal_id) { + for (LoggedAction &la : _gamelog_actions) { + for (LoggedChange &lc : la.changes) { + if (lc.ct == GLCT_GRFBUG && lc.grfbug.grfid == grfid && + lc.grfbug.bug == GBUG_VEH_LENGTH && lc.grfbug.data == internal_id) { return false; } } @@ -789,18 +766,16 @@ void GamelogGRFUpdate(const GRFConfig *oldc, const GRFConfig *newc) * @param[out] ever_modified Max value of 'modified' from all binaries that ever saved this savegame. * @param[out] removed_newgrfs Set to true if any NewGRFs have been removed. */ -void GamelogInfo(LoggedAction *gamelog_action, uint gamelog_actions, uint32 *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs) +void GamelogInfo(const std::vector &gamelog_actions, uint32 *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs) { - const LoggedAction *laend = &gamelog_action[gamelog_actions]; - for (const LoggedAction *la = gamelog_action; la != laend; la++) { - const LoggedChange *lcend = &la->change[la->changes]; - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { - switch (lc->ct) { + for (const LoggedAction &la : gamelog_actions) { + for (const LoggedChange &lc : la.changes) { + switch (lc.ct) { default: break; case GLCT_REVISION: - *last_ottd_rev = lc->revision.newgrf; - *ever_modified = std::max(*ever_modified, lc->revision.modified); + *last_ottd_rev = lc.revision.newgrf; + *ever_modified = std::max(*ever_modified, lc.revision.modified); break; case GLCT_GRFREM: @@ -811,15 +786,14 @@ void GamelogInfo(LoggedAction *gamelog_action, uint gamelog_actions, uint32 *las } } -const char *GamelogGetLastRevision(const LoggedAction *gamelog_action, uint gamelog_actions) +const char *GamelogGetLastRevision(const std::vector &gamelog_actions) { - for (uint i = gamelog_actions; i > 0; i--) { - const LoggedAction &la = gamelog_action[i - 1]; - const LoggedChange *lcend = &(la.change[la.changes]); - for (const LoggedChange *lc = la.change; lc != lcend; lc++) { - switch (lc->ct) { + for (size_t i = gamelog_actions.size(); i > 0; i--) { + const LoggedAction &la = gamelog_actions[i - 1]; + for (const LoggedChange &lc : la.changes) { + switch (lc.ct) { case GLCT_REVISION: - return lc->revision.text; + return lc.revision.text; break; default: diff --git a/src/gamelog.h b/src/gamelog.h index f9ab0a47e0..48fdac4944 100644 --- a/src/gamelog.h +++ b/src/gamelog.h @@ -12,6 +12,8 @@ #include "newgrf_config.h" +struct LoggedAction; + /** The actions we log. */ enum GamelogActionType : uint8 { GLAT_START, ///< Game created @@ -29,7 +31,7 @@ void GamelogStartAction(GamelogActionType at); void GamelogStopAction(); void GamelogStopAnyAction(); -void GamelogFree(struct LoggedAction *gamelog_action, uint gamelog_actions); +void GamelogFree(std::vector &gamelog_actions); void GamelogReset(); /** @@ -61,7 +63,7 @@ void GamelogTestMode(); bool GamelogGRFBugReverse(uint32 grfid, uint16 internal_id); -void GamelogInfo(struct LoggedAction *gamelog_action, uint gamelog_actions, uint32 *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs); -const char *GamelogGetLastRevision(const struct LoggedAction *gamelog_action, uint gamelog_actions); +void GamelogInfo(const std::vector &gamelog_actions, uint32 *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs); +const char *GamelogGetLastRevision(const std::vector &gamelog_actions); #endif /* GAMELOG_H */ diff --git a/src/gamelog_internal.h b/src/gamelog_internal.h index a6f8780f0e..b49b42a6df 100644 --- a/src/gamelog_internal.h +++ b/src/gamelog_internal.h @@ -12,6 +12,8 @@ #include "gamelog.h" +#include + /** Type of logged change */ enum GamelogChangeType { GLCT_MODE, ///< Scenario editor x Game, different landscape @@ -78,13 +80,11 @@ struct LoggedChange { /** Contains information about one logged action that caused at least one logged change */ struct LoggedAction { - LoggedChange *change; ///< First logged change in this action - uint32 changes; ///< Number of changes in this action + std::vector changes; ///< Changes in this action GamelogActionType at; ///< Type of action uint64 tick; ///< Tick when it happened }; -extern LoggedAction *_gamelog_action; -extern uint _gamelog_actions; +extern std::vector _gamelog_actions; #endif /* GAMELOG_INTERNAL_H */ diff --git a/src/load_check.h b/src/load_check.h new file mode 100644 index 0000000000..fbdae78853 --- /dev/null +++ b/src/load_check.h @@ -0,0 +1,89 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file load_check.h Load check data. */ + +#ifndef LOAD_CHECK_H +#define LOAD_CHECK_H + +#include "company_base.h" +#include "date_type.h" +#include "gamelog_internal.h" +#include "newgrf_config.h" +#include "strings_type.h" +#include "3rdparty/cpp-btree/btree_map.h" +#include +#include +#include + +using CompanyPropertiesMap = btree::btree_map>; + +/** + * Container for loading in mode SL_LOAD_CHECK. + */ +struct LoadCheckData { + bool checkable; ///< True if the savegame could be checked by SL_LOAD_CHECK. (Old savegames are not checkable.) + StringID error; ///< Error message from loading. INVALID_STRING_ID if no error. + std::string error_msg; ///< Data to pass to SetDParamStr when displaying #error. + + uint32 map_size_x, map_size_y; + Date current_date; + + GameSettings settings; + + CompanyPropertiesMap companies; ///< Company information. + + GRFConfig *grfconfig; ///< NewGrf configuration from save. + bool want_grf_compatibility = true; + GRFListCompatibility grf_compatibility; ///< Summary state of NewGrfs, whether missing files or only compatible found. + + std::vector gamelog_actions; ///< Gamelog actions + + bool want_debug_data = false; + std::string debug_log_data; + std::string debug_config_data; + + bool sl_is_ext_version = false; + + LoadCheckData() : grfconfig(nullptr), + grf_compatibility(GLC_NOT_FOUND) + { + this->Clear(); + } + + /** + * Don't leak memory at program exit + */ + ~LoadCheckData() + { + this->Clear(); + } + + /** + * Check whether loading the game resulted in errors. + * @return true if errors were encountered. + */ + bool HasErrors() + { + return this->checkable && this->error != INVALID_STRING_ID; + } + + /** + * Check whether the game uses any NewGrfs. + * @return true if NewGrfs are used. + */ + bool HasNewGrfs() + { + return this->checkable && this->error == INVALID_STRING_ID && this->grfconfig != nullptr; + } + + void Clear(); +}; + +extern LoadCheckData _load_check_data; + +#endif /* LOAD_CHECK_H */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 81919036aa..0ac04903f7 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -25,6 +25,7 @@ #include "command_func.h" #include "news_func.h" #include "fios.h" +#include "load_check.h" #include "aircraft.h" #include "roadveh.h" #include "train.h" @@ -328,7 +329,7 @@ static void WriteSavegameInfo(const char *name) byte ever_modified = 0; bool removed_newgrfs = false; - GamelogInfo(_load_check_data.gamelog_action, _load_check_data.gamelog_actions, &last_ottd_rev, &ever_modified, &removed_newgrfs); + GamelogInfo(_load_check_data.gamelog_actions, &last_ottd_rev, &ever_modified, &removed_newgrfs); char buf[65536]; char *p = buf; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index ec60fb4c5e..d2d1a0605f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -389,12 +389,11 @@ static void ResetSignalHandlers() */ static const GRFIdentifier *GetOverriddenIdentifier(const GRFConfig *c) { - const LoggedAction *la = &_gamelog_action[_gamelog_actions - 1]; - if (la->at != GLAT_LOAD) return &c->ident; + const LoggedAction &la = _gamelog_actions.back(); + if (la.at != GLAT_LOAD) return &c->ident; - const LoggedChange *lcend = &la->change[la->changes]; - for (const LoggedChange *lc = la->change; lc != lcend; lc++) { - if (lc->ct == GLCT_GRFCOMPAT && lc->grfcompat.grfid == c->ident.grfid) return &lc->grfcompat; + for (const LoggedChange &lc : la.changes) { + if (lc.ct == GLCT_GRFCOMPAT && lc.grfcompat.grfid == c->ident.grfid) return &lc.grfcompat; } return &c->ident; diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index fb4f8aa823..213e2d08a4 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -15,6 +15,7 @@ #include "../company_func.h" #include "../company_manager_face.h" #include "../fios.h" +#include "../load_check.h" #include "../tunnelbridge_map.h" #include "../tunnelbridge.h" #include "../station_base.h" diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp index c0ebd3991b..3b0d28dc92 100644 --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -14,6 +14,7 @@ #include "../gamelog_internal.h" #include "../fios.h" +#include "../load_check.h" #include "../string_func.h" #include "../safeguards.h" @@ -309,27 +310,26 @@ public: void Save(LoggedAction *la) const override { - SlSetStructListLength(la->changes); + SlSetStructListLength(la->changes.size()); - const LoggedChange *lcend = &la->change[la->changes]; - for (LoggedChange *lc = la->change; lc != lcend; lc++) { - assert((uint)lc->ct < GLCT_END); - SlObject(lc, this->GetDescription()); + for (LoggedChange &lc : la->changes) { + assert((uint)lc.ct < GLCT_END); + SlObject(&lc, this->GetDescription()); } } void Load(LoggedAction *la) const override { + la->changes.clear(); + if (IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY)) { byte type; while ((type = SlReadByte()) != GLCT_NONE) { if (type >= GLCT_END) SlErrorCorrupt("Invalid gamelog change type"); GamelogChangeType ct = (GamelogChangeType)type; - la->change = ReallocT(la->change, la->changes + 1); - - LoggedChange *lc = &la->change[la->changes++]; - *lc = LoggedChange{}; + la->changes.push_back({}); + LoggedChange *lc = &la->changes.back(); lc->ct = ct; SlObject(lc, this->GetLoadDescription()); @@ -338,12 +338,11 @@ public: } size_t length = SlGetStructListLength(UINT32_MAX); - la->change = ReallocT(la->change, length); - la->changes = (uint32)length; + la->changes.reserve(length); for (size_t i = 0; i < length; i++) { - LoggedChange *lc = &la->change[i]; - *lc = LoggedChange{}; + la->changes.push_back({}); + LoggedChange *lc = &la->changes.back(); lc->ct = (GamelogChangeType)SlReadByte(); SlObject(lc, this->GetLoadDescription()); @@ -363,10 +362,9 @@ static const SaveLoad _gamelog_desc[] = { struct GLOGChunkHandler : ChunkHandler { GLOGChunkHandler() : ChunkHandler('GLOG', CH_TABLE) {} - void LoadCommon(LoggedAction *&gamelog_action, uint &gamelog_actions) const + void LoadCommon(std::vector &gamelog_actions) const { - assert(gamelog_action == nullptr); - assert(gamelog_actions == 0); + assert(gamelog_actions.empty()); const std::vector slt = SlCompatTableHeader(_gamelog_desc, _gamelog_sl_compat); @@ -375,22 +373,18 @@ struct GLOGChunkHandler : ChunkHandler { while ((type = SlReadByte()) != GLAT_NONE) { if (type >= GLAT_END) SlErrorCorrupt("Invalid gamelog action type"); - gamelog_action = ReallocT(gamelog_action, gamelog_actions + 1); - LoggedAction *la = &gamelog_action[gamelog_actions++]; - *la = LoggedAction{}; + LoggedAction &la = gamelog_actions.emplace_back(); - la->at = (GamelogActionType)type; - SlObject(la, slt); + la.at = (GamelogActionType)type; + SlObject(&la, slt); } return; } while (SlIterateArray() != -1) { - gamelog_action = ReallocT(gamelog_action, gamelog_actions + 1); - LoggedAction *la = &gamelog_action[gamelog_actions++]; - *la = LoggedAction{}; + LoggedAction &la = gamelog_actions.emplace_back(); - SlObject(la, slt); + SlObject(&la, slt); } } @@ -398,23 +392,22 @@ struct GLOGChunkHandler : ChunkHandler { { SlTableHeader(_gamelog_desc); - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; - uint i = 0; - for (LoggedAction *la = _gamelog_action; la != laend; la++, i++) { + for (LoggedAction &la : _gamelog_actions) { SlSetArrayIndex(i); - SlObject(la, _gamelog_desc); + SlObject(&la, _gamelog_desc); + i++; } } void Load() const override { - this->LoadCommon(_gamelog_action, _gamelog_actions); + this->LoadCommon(_gamelog_actions); } void LoadCheck(size_t) const override { - this->LoadCommon(_load_check_data.gamelog_action, _load_check_data.gamelog_actions); + this->LoadCommon(_load_check_data.gamelog_actions); } }; diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp index d974da8322..afea07a59d 100644 --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -15,6 +15,7 @@ #include "../map_func.h" #include "../core/bitmath_func.hpp" #include "../fios.h" +#include "../load_check.h" #include #include "../safeguards.h" diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index e597c4a4d4..857a499a85 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -20,6 +20,7 @@ #include "../gfx_func.h" #include "../core/random_func.hpp" #include "../fios.h" +#include "../load_check.h" #include "../timer/timer.h" #include "../timer/timer_game_tick.h" diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp index ae36fe7756..99c73d979d 100644 --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -14,6 +14,7 @@ #include "newgrf_sl.h" #include "../fios.h" +#include "../load_check.h" #include "../safeguards.h" diff --git a/src/saveload/settings_sl.cpp b/src/saveload/settings_sl.cpp index 5224e01d0f..3a807f2e0b 100644 --- a/src/saveload/settings_sl.cpp +++ b/src/saveload/settings_sl.cpp @@ -17,6 +17,7 @@ #include "../settings_internal.h" #include "../network/network.h" #include "../fios.h" +#include "../load_check.h" #include "../safeguards.h" diff --git a/src/settings.cpp b/src/settings.cpp index b6cb548870..344a3d7f83 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -66,6 +66,7 @@ #include "smallmap_gui.h" #include "roadveh.h" #include "fios.h" +#include "load_check.h" #include "strings_func.h" #include "string_func.h" #include "debug.h" diff --git a/src/sl/company_sl.cpp b/src/sl/company_sl.cpp index 4bf791441c..5a6bb6d970 100644 --- a/src/sl/company_sl.cpp +++ b/src/sl/company_sl.cpp @@ -11,6 +11,7 @@ #include "../company_func.h" #include "../company_manager_face.h" #include "../fios.h" +#include "../load_check.h" #include "../tunnelbridge_map.h" #include "../tunnelbridge.h" #include "../station_base.h" diff --git a/src/sl/debug_sl.cpp b/src/sl/debug_sl.cpp index 7c904d73bf..6bfb1fe77b 100644 --- a/src/sl/debug_sl.cpp +++ b/src/sl/debug_sl.cpp @@ -13,6 +13,7 @@ #include "saveload.h" #include "saveload_buffer.h" #include "../fios.h" +#include "../load_check.h" #include "../safeguards.h" diff --git a/src/sl/gamelog_sl.cpp b/src/sl/gamelog_sl.cpp index 8270190c53..8d4f313409 100644 --- a/src/sl/gamelog_sl.cpp +++ b/src/sl/gamelog_sl.cpp @@ -10,6 +10,7 @@ #include "../stdafx.h" #include "../gamelog_internal.h" #include "../fios.h" +#include "../load_check.h" #include "../string_func.h" #include "saveload.h" @@ -96,37 +97,31 @@ static const SaveLoadTable _glog_desc[] = { static_assert(lengthof(_glog_desc) == GLCT_END); -static void Load_GLOG_common(LoggedAction *&gamelog_action, uint &gamelog_actions) +static void Load_GLOG_common(std::vector &gamelog_actions) { - assert(gamelog_action == nullptr); - assert(gamelog_actions == 0); + assert(gamelog_actions.empty()); byte type; while ((type = SlReadByte()) != GLAT_NONE) { if (type >= GLAT_END) SlErrorCorrupt("Invalid gamelog action type"); GamelogActionType at = (GamelogActionType)type; - gamelog_action = ReallocT(gamelog_action, gamelog_actions + 1); - LoggedAction *la = &gamelog_action[gamelog_actions++]; + LoggedAction &la = gamelog_actions.emplace_back(); - la->at = at; + la.at = at; - SlObject(la, _glog_action_desc); // has to be saved after 'DATE'! - la->change = nullptr; - la->changes = 0; + SlObject(&la, _glog_action_desc); // has to be saved after 'DATE'! while ((type = SlReadByte()) != GLCT_NONE) { if (type >= GLCT_END) SlErrorCorrupt("Invalid gamelog change type"); GamelogChangeType ct = (GamelogChangeType)type; - la->change = ReallocT(la->change, la->changes + 1); + la.changes.push_back({}); + LoggedChange *lc = &la.changes.back(); - LoggedChange *lc = &la->change[la->changes++]; - /* for SLE_STR, pointer has to be valid! so make it nullptr */ - memset(lc, 0, sizeof(*lc)); lc->ct = ct; - SlObject(lc, _glog_desc[ct]); + if (ct == GLCT_REVISION && SlXvIsFeatureMissing(XSLFI_EXTENDED_GAMELOG)) { lc->revision.text = stredup(old_revision_text, lastof(old_revision_text)); } @@ -136,44 +131,30 @@ static void Load_GLOG_common(LoggedAction *&gamelog_action, uint &gamelog_action static void Save_GLOG() { - const LoggedAction *laend = &_gamelog_action[_gamelog_actions]; - size_t length = 0; + SlAutolength([](void *) { + for (LoggedAction &la : _gamelog_actions) { + SlWriteByte(la.at); + SlObject(&la, _glog_action_desc); - for (const LoggedAction *la = _gamelog_action; la != laend; la++) { - const LoggedChange *lcend = &la->change[la->changes]; - for (LoggedChange *lc = la->change; lc != lcend; lc++) { - assert((uint)lc->ct < lengthof(_glog_desc)); - length += SlCalcObjLength(lc, _glog_desc[lc->ct]) + 1; + for (LoggedChange &lc : la.changes) { + SlWriteByte(lc.ct); + assert((uint)lc.ct < GLCT_END); + SlObject(&lc, _glog_desc[lc.ct]); + } + SlWriteByte(GLCT_NONE); } - length += 10; - } - length++; - - SlSetLength(length); - - for (LoggedAction *la = _gamelog_action; la != laend; la++) { - SlWriteByte(la->at); - SlObject(la, _glog_action_desc); - - const LoggedChange *lcend = &la->change[la->changes]; - for (LoggedChange *lc = la->change; lc != lcend; lc++) { - SlWriteByte(lc->ct); - assert((uint)lc->ct < GLCT_END); - SlObject(lc, _glog_desc[lc->ct]); - } - SlWriteByte(GLCT_NONE); - } - SlWriteByte(GLAT_NONE); + SlWriteByte(GLAT_NONE); + }, nullptr); } static void Load_GLOG() { - Load_GLOG_common(_gamelog_action, _gamelog_actions); + Load_GLOG_common(_gamelog_actions); } static void Check_GLOG() { - Load_GLOG_common(_load_check_data.gamelog_action, _load_check_data.gamelog_actions); + Load_GLOG_common(_load_check_data.gamelog_actions); } static const ChunkHandler gamelog_chunk_handlers[] = { diff --git a/src/sl/map_sl.cpp b/src/sl/map_sl.cpp index 5017b7557e..80d8771fd9 100644 --- a/src/sl/map_sl.cpp +++ b/src/sl/map_sl.cpp @@ -13,6 +13,7 @@ #include "../core/endian_func.hpp" #include "../core/endian_type.hpp" #include "../fios.h" +#include "../load_check.h" #include #include "saveload.h" diff --git a/src/sl/misc_sl.cpp b/src/sl/misc_sl.cpp index ddc64b7ca4..9a4d2551f3 100644 --- a/src/sl/misc_sl.cpp +++ b/src/sl/misc_sl.cpp @@ -16,6 +16,7 @@ #include "../gfx_func.h" #include "../core/random_func.hpp" #include "../fios.h" +#include "../load_check.h" #include "../road_type.h" #include "../core/checksum_func.hpp" #include "../event_logs.h" diff --git a/src/sl/newgrf_sl.cpp b/src/sl/newgrf_sl.cpp index dd5932a750..288ae701e6 100644 --- a/src/sl/newgrf_sl.cpp +++ b/src/sl/newgrf_sl.cpp @@ -9,6 +9,7 @@ #include "../stdafx.h" #include "../fios.h" +#include "../load_check.h" #include "../string_func.h" #include "saveload.h" diff --git a/src/sl/saveload.cpp b/src/sl/saveload.cpp index fc4bf9f1fd..300f015d88 100644 --- a/src/sl/saveload.cpp +++ b/src/sl/saveload.cpp @@ -42,6 +42,7 @@ #include "../string_func.h" #include "../string_func_extra.h" #include "../fios.h" +#include "../load_check.h" #include "../error.h" #include "../scope.h" #include From c0d47da4a78c8927170da6838466854e8c66d897 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 3 Jul 2023 22:43:37 +0100 Subject: [PATCH 13/18] Add missing includes to town_type.h, network_survey.h, pool_type.hpp --- src/core/pool_type.hpp | 1 + src/network/network_survey.h | 4 ++++ src/town_type.h | 1 + 3 files changed, 6 insertions(+) diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index b1ae61b350..80e5ececed 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -11,6 +11,7 @@ #define POOL_TYPE_HPP #include "enum_type.hpp" +#include /** Various types of a pool. */ enum PoolType { diff --git a/src/network/network_survey.h b/src/network/network_survey.h index c957108ecf..48206e51cd 100644 --- a/src/network/network_survey.h +++ b/src/network/network_survey.h @@ -12,6 +12,10 @@ #include #include +#if defined(__MINGW32__) +#include "../3rdparty/mingw-std-threads/mingw.condition_variable.h" +#include "../3rdparty/mingw-std-threads/mingw.mutex.h" +#endif #include "core/http.h" /** diff --git a/src/town_type.h b/src/town_type.h index d0cf7aaf9b..b7e327ce15 100644 --- a/src/town_type.h +++ b/src/town_type.h @@ -11,6 +11,7 @@ #define TOWN_TYPE_H #include "core/enum_type.hpp" +#include typedef uint16 TownID; struct Town; From d75c4894662606858e628bf5569e60756707509e Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 3 Jul 2023 23:34:52 +0100 Subject: [PATCH 14/18] Add various missing includes --- src/base_station_base.h | 1 + src/command_aux.h | 1 + src/core/smallstack_type.hpp | 1 + src/departures_type.h | 1 + src/engine_base.h | 1 + src/fios.h | 1 + src/gamelog.h | 1 + src/gfx_func.h | 1 + src/landscape.h | 1 + src/language.h | 1 + src/linkgraph/demands.h | 1 + src/linkgraph/linkgraph.h | 1 + src/linkgraph/linkgraphschedule.h | 1 + src/network/core/address.h | 1 + src/network/core/packet.h | 1 + src/network/core/tcp.h | 1 + src/network/core/tcp_content_type.h | 1 + src/network/network_content.h | 1 + src/network/network_query.h | 1 + src/newgrf.h | 1 + src/newgrf_commons.h | 1 + src/newgrf_debug.h | 1 + src/newgrf_internal.h | 1 + src/newgrf_newlandscape.h | 1 + src/newgrf_object.h | 1 + src/newgrf_spritegroup.h | 1 + src/newgrf_station.h | 1 + src/object_base.h | 1 + src/order_backup.h | 1 + src/programmable_signals.h | 1 + src/rail.h | 1 + src/settings_internal.h | 1 + src/sl/saveload.h | 1 - src/smallmap_gui.h | 1 + src/sortlist_type.h | 1 + src/stringfilter_type.h | 1 + src/textfile_gui.h | 1 + src/vehicle_base.h | 1 + src/vehicle_func.h | 1 + src/vehicle_gui.h | 1 + src/vehiclelist.h | 1 + src/video/sdl2_v.h | 1 + src/video/win32_v.h | 1 + src/viewport_sprite_sorter.h | 8 ++++---- src/widgets/dropdown_type.h | 1 + src/window_gui.h | 1 + 46 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index 3541589d47..6f2e73b8fb 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -17,6 +17,7 @@ #include "core/geometry_type.hpp" #include "core/tinystring_type.hpp" #include +#include typedef Pool StationPool; extern StationPool _station_pool; diff --git a/src/command_aux.h b/src/command_aux.h index f9af2884da..72ee23a1ab 100644 --- a/src/command_aux.h +++ b/src/command_aux.h @@ -15,6 +15,7 @@ #include "string_type.h" #include "core/serialisation.hpp" #include +#include struct CommandDeserialisationBuffer : public BufferDeserialisationHelper { const uint8 *buffer; diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index 662ed1aa23..c5a8291d55 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -9,6 +9,7 @@ #ifndef SMALLSTACK_TYPE_HPP #define SMALLSTACK_TYPE_HPP +#include /** * A simplified pool which stores values instead of pointers and doesn't diff --git a/src/departures_type.h b/src/departures_type.h index 91ccfadb66..82e7d33941 100644 --- a/src/departures_type.h +++ b/src/departures_type.h @@ -15,6 +15,7 @@ #include "station_base.h" #include "order_base.h" #include "vehicle_base.h" +#include /** Whether or not a vehicle has arrived for a departure. */ typedef enum { diff --git a/src/engine_base.h b/src/engine_base.h index 299fd58fbf..c199aacbce 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -17,6 +17,7 @@ #include "newgrf_commons.h" #include "3rdparty/cpp-btree/btree_map.h" +#include struct WagonOverride { std::vector engines; diff --git a/src/fios.h b/src/fios.h index ca8fb0c0a6..efb61888bf 100644 --- a/src/fios.h +++ b/src/fios.h @@ -14,6 +14,7 @@ #include "company_base.h" #include "newgrf_config.h" #include "network/core/tcp_content_type.h" +#include /** Special values for save-load window for the data parameter of #InvalidateWindowData. */ diff --git a/src/gamelog.h b/src/gamelog.h index 48fdac4944..40277483f2 100644 --- a/src/gamelog.h +++ b/src/gamelog.h @@ -11,6 +11,7 @@ #define GAMELOG_H #include "newgrf_config.h" +#include struct LoggedAction; diff --git a/src/gfx_func.h b/src/gfx_func.h index 1a26712b20..7ef1acb86b 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -42,6 +42,7 @@ #include "gfx_type.h" #include "strings_type.h" #include "string_type.h" +#include void GameLoop(); diff --git a/src/landscape.h b/src/landscape.h index 5c0d8327c7..4b029e80c1 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -12,6 +12,7 @@ #include "core/geometry_type.hpp" #include "tile_cmd.h" +#include static const uint SNOW_LINE_MONTHS = 12; ///< Number of months in the snow line table. static const uint SNOW_LINE_DAYS = 32; ///< Number of days in each month in the snow line table. diff --git a/src/language.h b/src/language.h index 0966ccb197..7e1ed3bc47 100644 --- a/src/language.h +++ b/src/language.h @@ -14,6 +14,7 @@ #include #endif /* WITH_ICU_I18N */ #include "strings_type.h" +#include static const uint8 CASE_GENDER_LEN = 16; ///< The (maximum) length of a case/gender string. static const uint8 MAX_NUM_GENDERS = 8; ///< Maximum number of supported genders. diff --git a/src/linkgraph/demands.h b/src/linkgraph/demands.h index b759c64941..c21e9cdc99 100644 --- a/src/linkgraph/demands.h +++ b/src/linkgraph/demands.h @@ -4,6 +4,7 @@ #define DEMANDS_H #include "linkgraphjob_base.h" +#include /** * Calculate the demands. This class has a state, but is recreated for each diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h index a50604de75..0fc571346c 100644 --- a/src/linkgraph/linkgraph.h +++ b/src/linkgraph/linkgraph.h @@ -19,6 +19,7 @@ #include "linkgraph_type.h" #include "../3rdparty/cpp-btree/btree_map.h" #include +#include class LinkGraph; diff --git a/src/linkgraph/linkgraphschedule.h b/src/linkgraph/linkgraphschedule.h index af54751afc..ee7602a221 100644 --- a/src/linkgraph/linkgraphschedule.h +++ b/src/linkgraph/linkgraphschedule.h @@ -13,6 +13,7 @@ #include "../thread.h" #include "linkgraph.h" #include +#include class LinkGraphJob; diff --git a/src/network/core/address.h b/src/network/core/address.h index 65adb9f3fc..8bad0618ff 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -17,6 +17,7 @@ #include #include +#include class NetworkAddress; typedef std::vector NetworkAddressList; ///< Type for a list of addresses. diff --git a/src/network/core/packet.h b/src/network/core/packet.h index 37780c92d4..52544d754e 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -20,6 +20,7 @@ #include #include #include +#include typedef uint16 PacketSize; ///< Size of the whole packet. typedef uint8 PacketType; ///< Identifier for the packet diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index 80b73ac3f1..d5551ce89e 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #if defined(__MINGW32__) #include "3rdparty/mingw-std-threads/mingw.thread.h" diff --git a/src/network/core/tcp_content_type.h b/src/network/core/tcp_content_type.h index f63cdbd492..5049c13f3c 100644 --- a/src/network/core/tcp_content_type.h +++ b/src/network/core/tcp_content_type.h @@ -13,6 +13,7 @@ #define NETWORK_CORE_TCP_CONTENT_TYPE_H #include "../../3rdparty/md5/md5.h" +#include /** The values in the enum are important; they are used as database 'keys' */ enum ContentType { diff --git a/src/network/network_content.h b/src/network/network_content.h index 53e4e1bb66..9c5287fb4c 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -14,6 +14,7 @@ #include "core/http.h" #include "../core/container_func.hpp" #include "../3rdparty/cpp-btree/btree_map.h" +#include /** Vector with content info */ typedef std::vector ContentVector; diff --git a/src/network/network_query.h b/src/network/network_query.h index e4e09fa1bb..2ef5b3ed63 100644 --- a/src/network/network_query.h +++ b/src/network/network_query.h @@ -11,6 +11,7 @@ #define NETWORK_QUERY_H #include "network_internal.h" +#include /** Class for handling the client side of quering a game server. */ class QueryNetworkGameSocketHandler : public ZeroedMemoryAllocator, public NetworkGameSocketHandler { diff --git a/src/newgrf.h b/src/newgrf.h index 7566bb95d1..69c8185030 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -20,6 +20,7 @@ #include "core/mem_func.hpp" #include "3rdparty/cpp-btree/btree_map.h" #include +#include /** * List of different canal 'features'. diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index fd462508e4..0034212c89 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -18,6 +18,7 @@ #include "command_type.h" #include "direction_type.h" #include "company_type.h" +#include /** Context for tile accesses */ enum TileContext : uint8 { diff --git a/src/newgrf_debug.h b/src/newgrf_debug.h index 56a9c60117..2b134654cd 100644 --- a/src/newgrf_debug.h +++ b/src/newgrf_debug.h @@ -13,6 +13,7 @@ #include "newgrf.h" #include "tile_type.h" #include "vehicle_type.h" +#include /** Current state of spritepicker */ enum NewGrfDebugSpritePickerMode { diff --git a/src/newgrf_internal.h b/src/newgrf_internal.h index c04f49499c..1ff083cd2d 100644 --- a/src/newgrf_internal.h +++ b/src/newgrf_internal.h @@ -19,6 +19,7 @@ #include "3rdparty/cpp-btree/btree_map.h" #include +#include /** Base GRF ID for OpenTTD's base graphics GRFs. */ static const uint32 OPENTTD_GRAPHICS_BASE_GRF_ID = BSWAP32(0xFF4F5400); diff --git a/src/newgrf_newlandscape.h b/src/newgrf_newlandscape.h index 105e6ce1a8..504121f907 100644 --- a/src/newgrf_newlandscape.h +++ b/src/newgrf_newlandscape.h @@ -12,6 +12,7 @@ #include "newgrf_commons.h" #include "newgrf_spritegroup.h" +#include extern std::vector _new_landscape_rocks_grfs; diff --git a/src/newgrf_object.h b/src/newgrf_object.h index ef6b3763ea..30b14c4614 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -19,6 +19,7 @@ #include "newgrf_animation_type.h" #include "newgrf_class.h" #include "newgrf_commons.h" +#include /** Various object behaviours. */ enum ObjectFlags : uint16 { diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index e5b3b5204b..410e715f2b 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -23,6 +23,7 @@ #include "3rdparty/cpp-btree/btree_set.h" #include +#include /** * Gets the value of a so-called newgrf "register". diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 1514e4d296..9f02b486a5 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -19,6 +19,7 @@ #include "rail_type.h" #include "newgrf_spritegroup.h" #include "newgrf_town.h" +#include /** Scope resolver for stations. */ struct StationScopeResolver : public ScopeResolver { diff --git a/src/object_base.h b/src/object_base.h index b60f7cb626..a0e791e8c0 100644 --- a/src/object_base.h +++ b/src/object_base.h @@ -15,6 +15,7 @@ #include "tilearea_type.h" #include "town_type.h" #include "date_type.h" +#include typedef Pool ObjectPool; extern ObjectPool _object_pool; diff --git a/src/order_backup.h b/src/order_backup.h index 33d7f1be62..4953a5b183 100644 --- a/src/order_backup.h +++ b/src/order_backup.h @@ -17,6 +17,7 @@ #include "base_consist.h" #include "order_base.h" #include "sl/saveload_common.h" +#include /** Unique identifier for an order backup. */ typedef uint8 OrderBackupID; diff --git a/src/programmable_signals.h b/src/programmable_signals.h index 2a348bf800..1365471690 100644 --- a/src/programmable_signals.h +++ b/src/programmable_signals.h @@ -13,6 +13,7 @@ #include "tracerestrict.h" #include "core/container_func.hpp" #include +#include /** @defgroup progsigs Programmable Pre-Signals */ ///@{ diff --git a/src/rail.h b/src/rail.h index 4efd4c3489..e916e3c505 100644 --- a/src/rail.h +++ b/src/rail.h @@ -21,6 +21,7 @@ #include "signal_type.h" #include "rail_map.h" #include "settings_type.h" +#include /** Railtype flags. */ enum RailTypeFlags { diff --git a/src/settings_internal.h b/src/settings_internal.h index 90eb39ce89..465556803b 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -13,6 +13,7 @@ #include "sl/saveload_types.h" #include +#include enum SettingFlag : uint32 { SF_NONE = 0, diff --git a/src/sl/saveload.h b/src/sl/saveload.h index d849bb0e4d..dc17a68964 100644 --- a/src/sl/saveload.h +++ b/src/sl/saveload.h @@ -19,7 +19,6 @@ #include #include #include -#include /** Save or load result codes. */ enum SaveOrLoadResult { diff --git a/src/smallmap_gui.h b/src/smallmap_gui.h index 939f8382b8..2d8f75a70a 100644 --- a/src/smallmap_gui.h +++ b/src/smallmap_gui.h @@ -18,6 +18,7 @@ #include "linkgraph/linkgraph_gui.h" #include "widgets/smallmap_widget.h" #include "guitimer_func.h" +#include static const int NUM_NO_COMPANY_ENTRIES = 4; ///< Number of entries in the owner legend that are not companies. diff --git a/src/sortlist_type.h b/src/sortlist_type.h index 3d4a2c3ea9..554478fd89 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -14,6 +14,7 @@ #include "core/bitmath_func.hpp" #include "core/mem_func.hpp" #include "date_type.h" +#include /** Flags of the sort list. */ enum SortListFlags { diff --git a/src/stringfilter_type.h b/src/stringfilter_type.h index 5b24587cb5..ef2b4d7efc 100644 --- a/src/stringfilter_type.h +++ b/src/stringfilter_type.h @@ -11,6 +11,7 @@ #define STRINGFILTER_TYPE_H #include "strings_type.h" +#include /** * String filter and state. diff --git a/src/textfile_gui.h b/src/textfile_gui.h index f71f8e5686..b2e71084cd 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -15,6 +15,7 @@ #include "textfile_type.h" #include "window_gui.h" #include +#include const char *GetTextfile(TextfileType type, Subdirectory dir, const char *filename); diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 27028ca221..c192abeb0d 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -28,6 +28,7 @@ #include "sl/saveload_common.h" #include #include +#include CommandCost CmdRefitVehicle(TileIndex, DoCommandFlag, uint32, uint32, const char*); diff --git a/src/vehicle_func.h b/src/vehicle_func.h index 87e67433c5..3815de6b88 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -20,6 +20,7 @@ #include "track_type.h" #include "livery.h" #include "cargo_type.h" +#include #define is_custom_sprite(x) (x >= 0xFD) #define IS_CUSTOM_FIRSTHEAD_SPRITE(x) (x == 0xFD) diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 1099fe0d0e..256b9a4dce 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -17,6 +17,7 @@ #include "engine_type.h" #include "company_type.h" #include "widgets/dropdown_func.h" +#include void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order, Window *parent, bool auto_refit = false, bool is_virtual_train = false); diff --git a/src/vehiclelist.h b/src/vehiclelist.h index 4aadc7b786..866f4eb632 100644 --- a/src/vehiclelist.h +++ b/src/vehiclelist.h @@ -14,6 +14,7 @@ #include "company_type.h" #include "tile_type.h" #include "cargo_type.h" +#include /** Vehicle List type flags */ enum VehicleListType { diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h index ce7d79f249..3def038f44 100644 --- a/src/video/sdl2_v.h +++ b/src/video/sdl2_v.h @@ -16,6 +16,7 @@ #endif #include "video_driver.hpp" +#include /** The SDL video driver. */ class VideoDriver_SDL_Base : public VideoDriver { diff --git a/src/video/win32_v.h b/src/video/win32_v.h index 31f83c827b..968eb6b195 100644 --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -17,6 +17,7 @@ #include "../3rdparty/mingw-std-threads/mingw.mutex.h" #include "../3rdparty/mingw-std-threads/mingw.condition_variable.h" #endif +#include /** Base class for Windows video drivers. */ class VideoDriver_Win32Base : public VideoDriver { diff --git a/src/viewport_sprite_sorter.h b/src/viewport_sprite_sorter.h index b3e7ea5945..a631543d07 100644 --- a/src/viewport_sprite_sorter.h +++ b/src/viewport_sprite_sorter.h @@ -7,13 +7,13 @@ /** @file viewport_sprite_sorter.h Types related to sprite sorting. */ -#include "stdafx.h" -#include "core/bitmath_func.hpp" -#include "gfx_type.h" - #ifndef VIEWPORT_SPRITE_SORTER_H #define VIEWPORT_SPRITE_SORTER_H +#include "core/bitmath_func.hpp" +#include "gfx_type.h" +#include + /** Parent sprite that should be drawn */ #ifdef _MSC_VER struct __declspec(align(16)) ParentSpriteToDraw { diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 6b668efc27..87f3517048 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -13,6 +13,7 @@ #include "../window_type.h" #include "../gfx_func.h" #include "table/strings.h" +#include enum DropDownSyncFocus { DDSF_NONE = 0, diff --git a/src/window_gui.h b/src/window_gui.h index bb4eb11856..eadd59e17f 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -20,6 +20,7 @@ #include #include +#include /** * Flags to describe the look of the frame From 78d28d432b3942da0cd7af185385e7680a678290 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 5 Jun 2023 17:14:35 +0200 Subject: [PATCH 15/18] Codechange: allocate enough memory to layout the strings (cherry picked from commit 96fef9f64384b9f76641a28247fb63239ff3d39c) --- src/gfx_layout.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 9de917a80e..87b9495409 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -64,8 +64,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s { if (line.buffer != nullptr) free(line.buffer); - typename T::CharType *buff_begin = MallocT(DRAW_STRING_BUFFER); - const typename T::CharType *buffer_last = buff_begin + DRAW_STRING_BUFFER; + typename T::CharType *buff_begin = MallocT(str.size() + 1); + const typename T::CharType *buffer_last = buff_begin + str.size() + 1; typename T::CharType *buff = buff_begin; FontMap &fontMapping = line.runs; Font *f = Layouter::GetFont(state.fontsize, state.cur_colour); From 1793a5881d804fcb78f4ae65e8ca4b9e87319050 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 18 Jun 2023 19:26:53 +0200 Subject: [PATCH 16/18] Fix: Layouter::GetCharAtPosition counting wrong Bug introduced in commit 60399e (cherry picked from commit ed3f14686d1a8328c384674cb2f7a665245ef0a9) --- src/gfx_layout.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 87b9495409..4ed2204363 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -255,9 +255,9 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const } /** - * Get the character that is at a position. + * Get the character that is at a pixel position in the first line of the layouted text. * @param x Position in the string. - * @return Index of the position or -1 if no character is at the position. + * @return String offset of the position (bytes) or -1 if no character is at the position. */ ptrdiff_t Layouter::GetCharAtPosition(int x) const { @@ -278,9 +278,8 @@ ptrdiff_t Layouter::GetCharAtPosition(int x) const size_t index = run.GetGlyphToCharMap()[i]; size_t cur_idx = 0; - int char_index = 0; - for (auto str = this->string.begin(); str != this->string.end(); char_index++) { - if (cur_idx == index) return char_index; + for (auto str = this->string.begin(); str != this->string.end();) { + if (cur_idx == index) return str - this->string.begin(); WChar c = Utf8Consume(str); cur_idx += line->GetInternalCharLength(c); From f55027a8f4dabd64635191a395ffefac9d1cce33 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 3 Apr 2021 19:48:34 +0200 Subject: [PATCH 17/18] Fix: Layouter not taking stripped formatting codes into account when mapping visual coordinates to/from original string (cherry picked from commit 103d88ee334a3637c490d9f3c823908e8336b98e) --- src/gfx_layout.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 4ed2204363..a17ef42f1c 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -206,6 +206,19 @@ Dimension Layouter::GetBounds() return d; } +/** + * Test whether a character is a non-printable formatting code + */ +static bool IsConsumedFormattingCode(WChar ch) +{ + if (ch >= SCC_BLUE && ch <= SCC_BLACK) return true; + if (ch == SCC_PUSH_COLOUR) return true; + if (ch == SCC_POP_COLOUR) return true; + if (ch >= SCC_FIRST_FONT && ch <= SCC_LAST_FONT) return true; + // All other characters defined in Unicode standard are assumed to be non-consumed. + return false; +} + /** * Get the position of a character in the layout. * @param ch Character to get the position of. Must be an iterator of the string passed to the constructor. @@ -228,7 +241,7 @@ Point Layouter::GetCharPosition(std::string_view::const_iterator ch) const auto str = this->string.begin(); while (str < ch) { WChar c = Utf8Consume(str); - index += line->GetInternalCharLength(c); + if (!IsConsumedFormattingCode(c)) index += line->GetInternalCharLength(c); } /* We couldn't find the code point index. */ @@ -282,7 +295,7 @@ ptrdiff_t Layouter::GetCharAtPosition(int x) const if (cur_idx == index) return str - this->string.begin(); WChar c = Utf8Consume(str); - cur_idx += line->GetInternalCharLength(c); + if (!IsConsumedFormattingCode(c)) cur_idx += line->GetInternalCharLength(c); } } } From 978c83e13d6260f553eff449971d4b3a461d27a8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 22 May 2023 18:06:05 +0200 Subject: [PATCH 18/18] Fix: false positive warning in fmt library (backport ef55d4f of upstream fmt) (cherry picked from commit 10e12154f5e94e6b4856df9992235398f0139c3a) --- src/3rdparty/fmt/core.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/3rdparty/fmt/core.h b/src/3rdparty/fmt/core.h index d6333bbeb1..26517a4958 100644 --- a/src/3rdparty/fmt/core.h +++ b/src/3rdparty/fmt/core.h @@ -1666,8 +1666,7 @@ constexpr auto encode_types() -> unsigned long long { template FMT_CONSTEXPR FMT_INLINE auto make_value(T&& val) -> value { - auto&& arg = arg_mapper().map(FMT_FORWARD(val)); - using arg_type = remove_cvref_t; + using arg_type = remove_cvref_t().map(val))>; constexpr bool formattable_char = !std::is_same::value; @@ -1686,7 +1685,7 @@ FMT_CONSTEXPR FMT_INLINE auto make_value(T&& val) -> value { formattable, "Cannot format an argument. To make type T formattable provide a " "formatter specialization: https://fmt.dev/latest/api.html#udt"); - return {arg}; + return {arg_mapper().map(val)}; } template